- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2Oracle高级数据选择
Oracle高级数据选择 提纲 显示多表数据 连接/外连接/自连接 组函数及其用法 子查询 连接 数据库中有很多的表,通常我们会按有意义的方式从多个表中取得数据。 连接两个表中数据的条件是:两个表中有相同的列(名称相同或者不同),通常这个列是其中一个表的主键(或主键的一部分) 连接表的键 连接 select e.ename,e.deptno,d.dname from emp e,dept d where e.deptno=d.deptno; 对应ANSI语法: select ename,emp.deptno,dname from emp join dept on emp.deptno=dept.deptno 注意:如果没有连接条件会生成迪卡尔积(cross join)。没有现实意义。为避免出现迪卡尔积情况,N个表至少要有N-1个相等性条件。 自然连接 Oracle根据两个表中的同名列自然建立连接。 对EMP和DEPT两个表,DEPTNO是两个表中唯一相同的列,因而两个表适合自然连接。 select ename,deptno,dname from emp natural join dept; 外连接 扩展了查询功能,即使在相同列中没有相应记录,也可以显示表中信息。 首先执行语句: update emp set deptno=NULL where ename=KING; 然后查询所有的职员所属的部门,没有所属部门的显示为空。 外连接 外连接除了返回符合查询中连接条件的行,也返回一个表中不符合查询中连接条件的行。 select e.ename,e.deptno,d.dname from dept d,emp e where d.deptno(+)=e.deptno; d为外表(有+标志),e为内表,内表返回所有行 ansi: select e.ename,e.deptno,d.dname from emp e left outer join dept d on d.deptno=e.deptno; 左外,即左边的表返回所有行 外连接 select e.ename,e.deptno,d.dname from dept d,emp e where d.deptno=e.deptno(+); ansi: select e.ename,e.deptno,d.dname from emp e right outer join dept d on d.deptno=e.deptno; 全外连接 select e.ename,e.deptno,d.dname from emp e full outer join dept d on d.deptno=e.deptno; 回滚数据 rollback; 表的自连接 有时候需要用一个表进行连接,这是用表的两个副本连接表中数据。 可用两个别名指定同一表。 职工(NO,name,lead_by) 使用组函数 select avg(sal) from emp; select count(*),count(1),count(rowid) from emp; select max(sal),min(sal) from emp; select sum(sal) from emp; *组函数忽略空值。 Select avg(comm) from emp; 如果想计算comm平均值,而不忽略空值,如何做? group by子句 通常跟组函数联合使用 select job,count(job) from emp group by job select job,count(job) from emp; ? select job from emp group by job; 错误写法: Select ename,job from emp group by job; select deptno,avg(sal),job from emp group by deptno; 查询子句中的非组表达式都要放在列子句中组表达式之前,然后把非组表达式加入group by后面 select deptno,job,avg(sal) from emp group by deptno,job; 与order by一起使用 select deptno,job,avg(sal) from emp group by deptno,job order by 3 desc; Having筛选组数据 select deptno,job,avg(sal) from emp group by deptno,job having avg(sal)2000; Where用于分组前对记录筛选,having用于分组后筛选
您可能关注的文档
- 1.performance tuning_1 ORACLE 性能监控.ppt
- 高中2010英语考试真题.doc
- 超级易学的数据库结构图文解.ppt
- 第1章 Oracle_简介.ppt
- toad ppt toad基础知识.ppt
- 1-oracle体系结构入门.ppt
- toad_说明文档.ppt
- LoaRunnner_使用入门.ppt
- 手卫生、职业暴露、标准预防院感试题.doc
- oracle_SQL语句优化.ppt
- 《JJF 2132-2024荧光紫外灯人工气候老化试验装置校准规范:辐射照度参数》.pdf
- JJF 2120-2024轮速传感器校准规范.pdf
- 计量规程规范 JJF 2120-2024轮速传感器校准规范.pdf
- 《JJF 2129-2024钙钛矿太阳电池校准规范:光电性能参数》.pdf
- JJF 2129-2024钙钛矿太阳电池校准规范:光电性能参数.pdf
- 《JJF 2120-2024轮速传感器校准规范》.pdf
- JJF 2117-2024沥青混合料理论最大相对密度仪校准规范.pdf
- JJF 2116-2024特定蛋白分析仪校准规范.pdf
- 《JJF 2116-2024特定蛋白分析仪校准规范》.pdf
- 计量规程规范 JJF 2117-2024沥青混合料理论最大相对密度仪校准规范.pdf
文档评论(0)