子查询与高级查询.pptx
《子查询与高级查询.pptx》由会员分享,可在线阅读,更多相关《子查询与高级查询.pptx(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1第8章 子查询与高级查询本章要点:掌握在WHERE子句中使用子查询。掌握在HAVING子句中使用子查询。熟练掌握使用IN、ANY和ALL操作符实现子查询。熟练掌握关联子查询。熟练掌握嵌套子查询。掌握简单连接。熟练掌握多个表之间的内连接。熟练掌握多个表之间的外连接。了解多个表之间的交叉连接。掌握使用集合操作符实现集合查询。第1页/共39页28.1 子 查 询在外部的SELECT、UPDATE或DELETE语句内部使用SELECT语句,这个内部SELECT语句称为子查询(Subquery)。使用子查询,主要是将子查询的结果作为外部主查询的查找条件。第2页/共39页38.1.1 子查询的类型在子查
2、询中可以使用两种比较操作符单行操作符和多行操作符。单行操作符:例如=、=、=、!=。多行操作符:例如ALL、ANY、IN、EXISTS。可以把子查询分为两种类型:单行子查询和多行子查询。另外,子查询还有下面3种子类型,这3种子类型可以返回一行或多行查询结果。多列子查询:向外部的SQL语句返回多列。关联子查询:引用外部的SQL语句中的一列或多列。在关联子查询中,可以使用EXISTS和NOT EXISTS操作符。嵌套子查询:在子查询中包含有子查询。指定子查询时,需要注意以下几点:子查询需要使用括号()括起来。子查询要放在比较操作符的右边。当子查询的返回值是一个集合而不是一个值时,不能使用单行操作符
3、,而必须根据需要使用ANY、IN、ALL或EXISTS等操作符。第3页/共39页48.1.2 在WHERE子句中使用子查询1使用子查询在WHERE子句中使用子查询的一般用法形式如下:SELECT column_list FROM table_name WHERE expression operator(SELECT column_name FROM table_name WHERE condition GROUP BY exp HAVING having);其中,在外部SELECT语句的WHERE子句中,expression用来指定一个表达式,也可以是表中的一列;operator可以是单行和多
4、行操作符;()中的内容表示子查询内容。第4页/共39页58.1.2 在WHERE子句中使用子查询2不能使用ORDER BY子句在子查询的SELECT语句中,可以使用FROM子句、WHERE子句、GROUP BY子句和HAVING子句等,但是有些情况下不能使用ORDER BY子句,例如在WHERE子句中使用子查询时,子查询语句中就不能使用ORDER BY子句。第5页/共39页68.1.3 在HAVING子句中使用子查询在SELECT语句中使用HAVING子句,可以实现对数据进行分组过滤。在HAVING子句中,如果使用子查询,那么就可以实现对子查询返回的结果根据分组进行过滤。【例8.3】对scot
5、t用户的emp表进行检索,在HAVING子句中使用子查询。获取哪些部门的员工平均工资小于全体员工的平均工资。具体如下:SQL SELECT deptno,AVG(sal)FROM scott.emp GROUP BY deptno 2 HAVING AVG(sal)、SELECT empno,ename,sal,deptno FROM scott.emp 2 WHERE sal (3 SELECT MAX(AVG(sal)FROM scott.emp WHERE deptno IN(4 SELECT deptno FROM scott.dept 5 WHERE loc IN(NEW YORK,
6、CHICAGO)6 GROUP BY deptno);EMPNOENAME SAL DEPTNO-7566JONES 2975 20 7788SCOTT 3000 20 7839KING 5000 10 7902FORD 3000 20第15页/共39页168.1.10 在UPDATE和DELETE语句中使用子查询1在UPDATE语句中使用子查询在UPDATE语句中使用子查询,可以将子查询返回的结果赋值给需要更新的列。【例8.17】将员工编号为7839的员工的工资设置为平均工资,如下:SQL UPDATE scott.emp SET sal=(2 SELECT AVG(sal)FROM sco
7、tt.emp)3 WHERE empno=7839;已更新 1 行。2在DELETE语句中使用子查询在DELETE语句中使用子查询,可以根据子查询返回的结果删除指定的行。【例8.18】删除工作地点在NEW YORK的所有员工信息,如下:SQL DELETE FROM scott.emp WHERE deptno IN(2 SELECT deptno FROM scott.dept WHERE loc=NEW YORK);已删除3行。第16页/共39页178.2 实验指导获取借阅次数最多的前5本图书实验指导8-1:获取借阅次数最多的前5本图书由于需要显示图书信息,所以从图书表book中进行检索;
8、然后结合借书表lend,获得每本书的借阅情况;最后按照每本书的借阅次数降序排列,获得前5本图书信息即可。具体如下:参见教材P182上述语句中,在最外层SELECT语句的WHERE子句中使用了子查询,并且使用IN操作符指定匹配查询;第3行的SELECT语句中,在FROM子句中使用子查询,通过子查询获得分组和排序之后的bookid;最后在WHERE子句中指定rownum列小于等于5,指定排序之后的前5行记录。第17页/共39页补充在 select 子句中使用子查询显示每个员工和企业平均工资之间的差距select empno,ename,sal,sal-(select avg(sal)from sc
9、ott.emp)saldiff from scott.emp4在from子句中使用子查询查询各个部门中,那些员工的工资低于其所在部门的平均工资select a.empno,a.ename,a.sal,a.deptno from scott.emp a,(select deptno,avg(sal)avgsal from scott.emp group by scott.emp.deptno)b where a.deptno=b.deptno and a.salb.avgsal18第18页/共39页练习背景:P106 图书管理系统出版时间最早的图书名称和图书编号价格次高的图书名称和图书编号每类图
10、书中价格最低的图书的图书名称和图书编号那类图书中包含的图书最多。19第19页/共39页练习出版时间最早的图书名称和图书编号 select booknumber,bookname from book where book.booktime=(select min(booktime)from book)价格次高的图书名称和图书编号select booknumber,bookname from book where book.bookprice=(select max(bookprice)from book where bookprice SELECT empno,ename,sal,e.deptn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查询 高级
限制150内