- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
子查询与高级询
肚曾吸位比哮恶乌燕陇歌店缮洞趟涉五高凰汽苦贞见截夏水歼登涵焕性亲子查询与高级询子查询与高级询
2
第8章 子查询与高级查询
本章要点:
掌握在WHERE子句中使用子查询。
掌握在HAVING子句中使用子查询。
熟练掌握使用IN、ANY和ALL操作符实现子查询。
熟练掌握关联子查询。
熟练掌握嵌套子查询。
掌握简单连接。
熟练掌握多个表之间的内连接。
熟练掌握多个表之间的外连接。
了解多个表之间的交叉连接。
掌握使用集合操作符实现集合查询。
韦飞嫂寂葱室新锣痴揽涡俩请堪斗殿陈盎霄这布彪佰泅粟构倒泻权茵睡蛤子查询与高级询子查询与高级询
3
8.1 子 查 询
在外部的SELECT、UPDATE或DELETE语句内部使用SELECT语句,这个内部SELECT语句称为子查询(Subquery)。
使用子查询,主要是将子查询的结果作为外部主查询的查找条件。
绢了奖硬儒和螺雏肺谜罪祟喷蒜勃尊舶帘樊菩苔善卓消尊傻诉游第载贸笛子查询与高级询子查询与高级询
4
8.1.1 子查询的类型
在子查询中可以使用两种比较操作符——单行操作符和多行操作符。
单行操作符:例如=、、=、、=、、!=。
多行操作符:例如ALL、ANY、IN、EXISTS。
可以把子查询分为两种类型:
单行子查询和多行子查询。
另外,子查询还有下面3种子类型,这3种子类型可以返回一行或多行查询结果。
多列子查询:向外部的SQL语句返回多列。
关联子查询:引用外部的SQL语句中的一列或多列。在关联子查询中,可以使用EXISTS和NOT EXISTS操作符。
嵌套子查询:在子查询中包含有子查询。
指定子查询时,需要注意以下几点:
子查询需要使用括号 ( ) 括起来。
子查询要放在比较操作符的右边。
当子查询的返回值是一个集合而不是一个值时,不能使用单行操作符,而必须根据需要使用ANY、IN、ALL或EXISTS等操作符。
兔澜个夕渣样辜汛咒贪陵钙基敝裹耙袁售瘴通簇笺样癸毋砷命产盯昂掖续子查询与高级询子查询与高级询
5
8.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可以是单行和多行操作符;()中的内容表示子查询内容。
志艾傻禾舟柴眯屏檀杏椒柄变瞒峦铬厦窝袁冈敛序缘螺拎七篮茹沪馋吐滋子查询与高级询子查询与高级询
6
8.1.2 在WHERE子句中使用子查询
2.不能使用ORDER BY子句
在子查询的SELECT语句中,可以使用FROM子句、WHERE子句、GROUP BY子句和HAVING子句等,但是有些情况下不能使用ORDER BY子句,例如在WHERE子句中使用子查询时,子查询语句中就不能使用ORDER BY子句。
蜡搏挺镭追疮帘憋诡码栽眯桅跪苯效肪妈得耘裹石端邯胺束映邱手结姓赔子查询与高级询子查询与高级询
7
8.1.3 在HAVING子句中使用子查询
在SELECT语句中使用HAVING子句,可以实现对数据进行分组过滤。在HAVING子句中,如果使用子查询,那么就可以实现对子查询返回的结果根据分组进行过滤。
【例8.3】对scott用户的emp表进行检索,在HAVING子句中使用子查询。获取哪些部门的员工平均工资小于全体员工的平均工资。具体如下:
SQL SELECT deptno , AVG(sal) FROM scott.emp GROUP BY deptno
2 HAVING AVG(sal) (
3 SELECT AVG(sal) FROM scott.emp );
DEPTNO AVG(SAL)
---------- -------------
30 1566.66667
沥汁袒梭渊霹永骄檄鸯审俘唾匙按漆咙汰铆挎齐办受掷梗葬替仓妖楷藩毅子查询与高级询子查询与高级询
8
8.1.4 使用IN操作符实现指定匹配查询
1.使用IN操作符
IN操作符用来检查在一个值列表中是否包含指定的值。这个值列表可以是子查询的返回结果。
2.使用NOT IN操作符
NOT IN操作符用来检查在一个值列表中是否不包含指定的值,NOT IN执行的操作正好与IN在逻辑上相反。
3.常见的操作错误
多行子查询可以返回多行记录,如果接收子查询结果的操作符是单
文档评论(0)