资源描述:
《Oracle数据库基础应用04》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章Oracle与高级SQL语句目标掌握SQL语句在Oracle数据库的高级应用分组查询连接查询子查询合并查询概述、专业术语在数据库应用与设计方面经常需要用到复杂查询来表达复杂的业务逻辑。本章将在基本的SQL语句使用的基础上学习高级SQL语句在Oracle数据库中的使用。术语词汇表定义在此章节中使用的术语分组查询当执行数据统计时,需要将表中的数据划分成几个组,最终统计每个组的数据结果数据分组统计是通过GROUPBY子句、分组函数以及HAVING子句共同实现分组查询分组函数:作用于多行,并返回单一的值分组函数一般要与GROU
2、PBY结合使用。如果没有GROUPBY子句会汇总所有的行,并产生一个结果selectavg(sal)as平均工资fromemp;雇员表中所有员工的平均工资selectcount(*)fromempwheresal>=2000;工资大于等于2000的员工人数分组查询GROUPBY:对查询结果进行分组统计selectdeptno,avg(sal),max(sal)fromempgroupbydeptno;使用GROUPBY进行单列分组显示每个部门平均工资和最高工资selectdeptno,job,avg(sal),max(sal
3、)fromempgroupbydeptno,job;使用GROUPBY进行多列分组显示每个部门每种岗位的平均工资和最高工资注意:SELECT选择列表中的列必须出现在groupby子句中分组查询HAVING:限制分组统计结果HAVING子句必须跟在GROUPBY之后selectdeptno,avg(sal),max(sal)fromempgroupbydeptnohavingavg(sal)<2500;显示平均工资低于2500的部门号、平均工资及最高工资连接查询相等连接:检索主从表之间的相关数据selecte.ename,e.
4、sal,d.dnamefromempe,deptdwheree.deptno=d.deptno;显示所有雇员的姓名、和工资及其所在的部门名称enamesal……deptnodeptnodname……selecte.ename,e.sal,d.dnamefromempe,deptdwheree.deptno=d.deptnoandd.deptno=10;使用AND指定其它条件连接查询不等连接:在连接条件中使用除相等比较符外的其它比较操作符的连接查询selecte.ename,e.sal,d.dnamefromempe,dept
5、dwheree.deptnobetween10and20;查询部门号在10和20之间的部门名称、雇员名称、雇员薪水连接查询自连接:在同一张表之间的连接查询。用在自参照表上显示上下级关系或者层次关系selecta.enamefromempa,empbwherea.empno=b.mgrandb.ename=‘BLAKE’;显示雇员“BLAKE”的上级经理的名字EMPNOENAMEMGR……7839KING7566JONES78397698BLAKE78397782CLARK7839……连接查询内连接和外连接内连接用于返回满足条
6、件的记录外连接不仅返回满连接足条件的所有记录,而且还返回不满足条件的记录SELECTtable1.column,table2.columnFROMtable1[INNER
7、LEFT
8、RIGHT
9、FULL]JOINtable2ONtable1.column=table2.column;INNERJOIN表示内连接LEFTJOIN表示左联接RIGHTJOIN表示右连接FULLJOIN表示完全连接ON后跟连接条件连接的语法:连接查询内连接(INNERJOIN)selecte.ename,d.dnamefromempeinnerjo
10、indeptdone.deptno=d.deptnoande.deptno=20;查询部门编号为“20”的所有雇员姓名及雇员所在部门的名称selecte.ename,d.dnamefromempe,deptdwheree.deptno=d.deptnoande.deptno=20;另一种写法(相等连接)连接查询左外连接(LEFT[OUTER]JOIN)selectd.dname,e.enamefromdeptdleftjoinempeond.deptno=e.deptnoandd.deptno=20;显示所有部门的名称,及部
11、门编号为20的所有雇员名字连接查询右外连接(RIGHT[OUTER]JOIN)selectd.dname,e.enamefromdeptdrightjoinempeond.deptno=e.deptnoande.deptno=20;显示所有雇员名字,及部门编号为20的雇员所在的部门的名称连