- 1、本文档共45页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
oracle11学习资料
10.子查询
1.1子查询
在外部的SELECT、UPDATE或DELETE语句内部使用SELECT语句,这个内部SELECT语句称为子查询(Subquery)。使用子查询,主要是将子查询的结果作为外部主查询的查找条件。
子查询在其他查询的基础上,提供一种进一步有效的方式来表示条件。子查询是一个SELECT语句,可以在外部SELECT语句的FROM、WHERE、HAVING等子句中使用,另外在UPDATE和DELETE语句中也可以使用子查询。
在子查询中可以使用两种比较操作符:单行操作符和多行操作符。
单行操作符 例如=、、=、、=、、!=
多行操作符 例如ALL、ANY、IN、EXISTS
可以把子查询分为两种类型:单行子查询和多行子查询。
单行子查询 向外部的SQL语句只返回一行数据,或者不返回任何内容。
单行子查询可以放到SELECT语句的WHERE子句和HAVING子句中。
多行子查询 向外部的SQL语句返回多行。要处理返回多行记录的子查
询,外部查询需要使用多行操作符。
另外,子查询还有下面3种子类型,这3种子类型可以返回一行或多行查询结果:
多列子查询 向外部的SQL语句返回多列。
关联子查询 引用外部的SQL语句中的一列或多列。在关联子查询中,可以使用EXISTS和NOT EXISTS操作符。
嵌套子查询 在子查询中包含有子查询。
指定子查询时,需要注意以下几点:
子查询需要使用括号(())括起来。
子查询要放在比较操作符的右边。
当子查询的返回值是一个集合而不是一个值时,不能使用单行操作符,
而必须根据需要使用ANY、IN、ALL或EXISTS等操作符。
A.内嵌视图
当在FROM子句中使用子查询时,该子句会被作为视图对待,因此也被
称为内嵌视图。 使用子查询的一般用法形式如下:
SELECT column_list FROM (SELECT column_name FROM table_name WHERE condition
GROUP BY exp HAVING having);
例如: SELECT deptno FROM (
SELECT deptno FROM scott.emp GROUP BY deptno ORDER BY COUNT(deptno) ASC
B.where 在SELECT语句的WHERE子句中可以使用子查询,表示将子查询返回
的结果作为外部的WHERE条件。
SQL SELECT empno , ename , sal , deptno FROM scott.emp
WHERE deptno = (SELECT deptno FROM scott.emp WHERE empno = 7782 );
C HAVING
在SELECT语句中使用HAVING子句,可以实现对数据进行分组过滤。在HAVING子句中,如果使用子查询,那么就可以实现对子查询返回的结果
根据分组进行过滤。
SQL SELECT deptno , AVG(sal) FROM scott.emp GROUP BY deptno
2 HAVING AVG(sal) (
3 SELECT AVG(sal) FROM scott.emp );
1.2 在UPDATE语句中使用子查询
在UPDATE语句中使用子查询,可以将子查询返回的结果赋值给需要更新的列。
【例】将员工编号为7839的员工的工资设置为平均工资,如下:
SQL UPDATE scott.emp SET sal = (
2 SELECT AVG(sal) FROM scott.emp ) WHERE empno = 7839 ;
1.3 DELETE语句中使用子查询
1.4 使用IN操作符实现指定匹配查询
多行子查询可以向外部的SQL语句返回一行或多行记录。要处理返回多行记录的子查询,外部查询需要使用多行操作符。 使用IN操作符,用来检查在一个值列表中是否包含指定的值。这个值列表可以是子查询的返回结果。 例如
SQL SELECT empno , ename , sal , deptno FROM scott.emp
2 WHERE deptno IN(
3 SELECT deptno FROM scott.dept
4 WHERE dname IN (ACCOUNTING , SALES)) ;
1.4.1 使用NOT IN操作符
NOT IN操作符用来检查在一个值列表中是否不包含指定的值,NOT IN执行的操作正好与IN在逻辑上相反。例如:
SQL SELECT empno , ename , sal , de
您可能关注的文档
最近下载
- 四年级下册美术第5课《色彩的明与暗》.ppt VIP
- 四川省2024-2025学年高三下学期第一次教学质量联合测评(2月联考)数学试题(含答案解析).pdf
- 人教版美术四年级下册第5课色彩的明与暗课件(共13张PPT).pptx VIP
- 六年级 下册 人教版 数学 第六单元《数的运算(一)(例1—例6)》课件.pptx
- 《心理健康与职业生涯》开学第一课(实用课件).pptx VIP
- 老年医学老年人急性期照护中期照护与长期照护.docx VIP
- 序篇 不忘初心(第一课时)课件-2024-2025学年高中音乐人音版(2019)必修 音乐鉴赏.pptx
- T∕CHES 33-2019 高校合同节水项目实施导则(可复制版).pdf
- 市政公用工程设计文件编制深度规定(2013年版).doc VIP
- 阑尾炎全套ppt课件.pptx VIP
文档评论(0)