- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 子查询与高级查询 本章要点: 掌握在WHERE子句中使用子查询。 掌握在HAVING子句中使用子查询。 熟练掌握使用IN、ANY和ALL操作符实现子查询。 熟练掌握关联子查询。 熟练掌握嵌套子查询。 掌握简单连接。 熟练掌握多个表之间的内连接。 熟练掌握多个表之间的外连接。 了解多个表之间的交叉连接。 掌握使用集合操作符实现集合查询。 8.1 子 查 询 在外部的SELECT、UPDATE或DELETE语句内部使用SELECT语句,这个内部SELECT语句称为子查询(Subquery)。 使用子查询,主要是将子查询的结果作为外部主查询的查找条件。 8.1.1 子查询的类型 在子查询中可以使用两种比较操作符——单行操作符和多行操作符。 单行操作符:例如=、、=、、=、、!=。 多行操作符:例如ALL、ANY、IN、EXISTS。 可以把子查询分为两种类型: 单行子查询和多行子查询。 另外,子查询还有下面3种子类型,这3种子类型可以返回一行或多行查询结果。 多列子查询:向外部的SQL语句返回多列。 关联子查询:引用外部的SQL语句中的一列或多列。在关联子查询中,可以使用EXISTS和NOT EXISTS操作符。 嵌套子查询:在子查询中包含有子查询。 指定子查询时,需要注意以下几点: 子查询需要使用括号 ( ) 括起来。 子查询要放在比较操作符的右边。 当子查询的返回值是一个集合而不是一个值时,不能使用单行操作符,而必须根据需要使用ANY、IN、ALL或EXISTS等操作符。 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可以是单行和多行操作符;()中的内容表示子查询内容。 8.1.2 在WHERE子句中使用子查询 2.不能使用ORDER BY子句 在子查询的SELECT语句中,可以使用FROM子句、WHERE子句、GROUP BY子句和HAVING子句等,但是有些情况下不能使用ORDER BY子句,例如在WHERE子句中使用子查询时,子查询语句中就不能使用ORDER BY子句。 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.1.4 使用IN操作符实现指定匹配查询 1.使用IN操作符 IN操作符用来检查在一个值列表中是否包含指定的值。这个值列表可以是子查询的返回结果。 2.使用NOT IN操作符 NOT IN操作符用来检查在一个值列表中是否不包含指定的值,NOT IN执行的操作正好与IN在逻辑上相反。 3.常见的操作错误 多行子查询可以返回多行记录,如果接收子查询结果的操作符是单行操作符,那么在执行语句时,可能会出现错误提示。 8.1.5 使用ANY操作符实现任意匹配查询 在进行多行子查询时,使用ANY操作符,用来将一个值与一个列表中的所有值进行比较,这个值只需要匹配列表中的一个值即可,然后将满足条件的数据返回。其中,值列表可以是子查询的返回结果。 在使用ANY操作符之前,必须使用一个单行操作符,例如=、、、=等。 【例8.7】对scott用户的emp表进行操作,获得工资大于任意一个部门的平均工资的员工信息,如下: 参见教材P176 8.1.6 使用ALL操作符实现全部匹配查询 在进行子查询时,使用ALL操作符,用来将一个值与一个列表中的所有值进行比较,这个值需要匹配列表中的所有值,然后将满足条件的数据返回。其中,值列表可以是子查询的返回结果。
原创力文档


文档评论(0)