- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 Oracle与高级SQL语句 目标 掌握SQL语句在Oracle数据库的高级应用 分组查询 连接查询 子查询 合并查询 概述、专业术语 在数据库应用与设计方面经常需要用到复杂查询来表达复杂的业务逻辑。 本章将在基本的SQL语句使用的基础上学习高级SQL语句在Oracle数据库中的使用。 术语词汇表 定义在此章节中使用的术语 分组查询 当执行数据统计时,需要将表中的数据划分成几个组,最终统计每个组的数据结果 数据分组统计是通过GROUP BY子句、分组函数以及HAVING子句共同实现 分组查询 分组函数:作用于多行,并返回单一的值 分组函数一般要与GROUP BY结合使用。 如果没有GROUP BY子句会汇总所有的行,并产生一个结果 分组查询 GROUP BY:对查询结果进行分组统计 分组查询 HAVING:限制分组统计结果 HAVING子句必须跟在GROUP BY之后 连接查询 相等连接:检索主从表之间的相关数据 连接查询 不等连接:在连接条件中使用除相等比较符外的其它比较操作符的连接查询 连接查询 自连接:在同一张表之间的连接查询。用在自参照表上显示上下级关系或者层次关系 连接查询 内连接和外连接 内连接用于返回满足条件的记录 外连接不仅返回满连接足条件的所有记录,而且还返回不满足条件的记录 连接查询 内连接 ( INNER JOIN ) 连接查询 左外连接 ( LEFT [OUTER] JOIN ) 连接查询 右外连接 ( RIGHT [OUTER] JOIN ) 连接查询 完全外连接( FULL [OUTER] JOIN ) 子查询 子查询:嵌入在其它SQL语句中的SELECT语句,也叫做嵌套查询 子查询又被分为 单行子查询 多行子查询 多列子查询 子查询 单行子查询:内层子查询只返回单行数据 外层查询的WHERE子句中可以使用单行比较运算符( 、= 、=、 =、 、 ) 子查询 多行子查询:内层子查询返回多行数据 外层查询的WHERE子句中必须使用多行比较符(IN、ALL、ANY ) 子查询 子查询 多列子查询:内层子查询返回多列数据 子查询 其它常用的子查询 子查询 合并查询 合并查询:将两个或多个分结果集进行集合操作得到新的结果集。 可采用的集合操作符有: UNION(并集,结果总集删除重复记录) UNIION ALL(并集,结果不删除重复记录) INTERSECT(交集) MINUS(差集) 合并查询 UNION:获取两个结果集的并集,自动过滤掉重复数据行,按输出结果的第一列排序 合并查询 INTERSECT:获取两个结果集的交集,即显示同时存在于两个结果集中的数据。 合并查询 MINUS:获取两个结果集的差集。即显示在第一个结果集中存在,第二个结果集中不存在的数据集。 其它复杂的查询 使用CASE表达式 总结 本章的主要内容:复杂查询 分组查询:分组函数+ group by + having 连接查询:inner, left, right, full join 子查询:单行,多行,多列,相关等子查询 合并查询:union[all],intersect,minus 其他复杂查询:使用case表达式 case…when…then…else…end 3.0 * 3.0 select avg ( sal ) as 平均工资 from emp ; 雇员表中所有员工的平均工资 select count ( * ) from emp where sal = 2000 ; 工资大于等于2000的员工人数 select deptno, avg(sal), max(sal) from emp group by deptno ; 使用GROUP BY进行单列分组 显示每个部门平均工资和最高工资 select deptno, job, avg(sal), max(sal) from emp group by deptno, job ; 使用GROUP BY进行多列分组 显示每个部门每种岗位的平均工资和最高工资 注意:SELECT选择列表中的列必须出现在group by子句中 select deptno, avg(sal), max(sal) from emp group by deptno having avg(sal) 2500 ; 显示平均工资低于2500的部门号、平均工资及最高工资 select e.ename, e.sal, d.dname from emp e, dept d where e.deptno = d.deptno ; 显示所有雇员的姓名、和工资及其所在的部门名称 …… sal deptno ename dname …
文档评论(0)