在SELECT查询中,若WHERE条件中的值并非固定,而是由另一个查询结果提供,则该嵌套的查询称为子查询。子查询先于主查询执行,用于为主查询生成所需数据。依据返回结果的不同,子查询可分为单行、多行和多列三种类型。
1、 单行子查询是指返回单一数据行的子查询,必须搭配单行比较符使用,如等于、大于、大于等于、小于、小于等于和不等于等运算符。
2、 单行子查询用于WHERE条件中,示例如下所示:
3、 查询员工信息时,筛选条件为薪水高于所在部门的平均薪资,需在子查询中使用分组函数计算各部门平均薪,并确保返回单行结果。
4、 在HAVING子句中使用单行子查询,用于筛选平均工资超过30号部门最高工资的部门信息。
5、 当子查询返回多行结果时,主查询需采用多行比较操作符进行匹配。Oracle支持的多行比较操作符有IN、ALL和ANY。其中,ALL与ANY不可独立使用,必须结合单行比较符如大于、大于等于、小于或小于等于等共同构成条件判断语句。
6、 多行子查询用IN操作符
7、 IN 后面跟随一个值的列表,这些值由子查询结果提供,所示。
8、 在多行子查询中应用ANY操作符进行比较匹配
9、 ANY操作符需配合大于、小于等比较运算符使用,不可单独存在。其中,>ANY 表示只要大于列表中任意一个值即返回真;
10、 多行子查询中应用ALL操作符比较
11、 ANY操作符需配合大于、小于等比较运算符使用,不可独立存在。其中,>ANY表示大于子查询中任意一个值即成立;
12、 多列子查询用于返回多个字段的数据。若结果仅一行,可采用单行比较符如=、>、>=、<、<=、<>;若返回多行,则需使用多行比较符,如IN、ALL、ANY来进行条件匹配判断。
13、 多列子查询仅返回单行结果
14、 多列子查询可返回多行结果数据
15、 内部视角
16、 行内视图又称内嵌视图或匿名视图,指的是位于FROM子句中的子查询。它将子查询结果当作临时视图使用,无需命名,仅在当前SQL语句中生效,执行结束后即消失,常用于简化复杂查询的结构与逻辑处理过程。
17、 存在条件
18、 使用EXIST条件的查询被称为相关子查询,指在子查询中引用主查询的字段。当EXIST后的子查询返回至少一行结果时,整个条件判定为真。例如,可用来查询包含员工的部门信息,确保所查部门中存在对应员工记录。
