SQL查询:[6]子查询

作者:烟中隐约闪现 | 创建时间: 2023-04-04
在SELECT查询时,在WHERE查询条件中的限制条件不是一个确定的值,而是来自另一个查询的结果,这种为主查询提供数据而首先执行的查询语句叫做子查询。根据返回结果的不同,子查询可分为单行子查询、多行子查询和多列子查询。...
SQL查询:[6]子查询

单行子查询

单行子查询指在子查询中只返回单行值,这种子查询需要使用单行比较运算符,包括=、>、>=、<、<=、<>.

单行子查询出现在WHERE子句中,如下所示:

单行子查询中有分组函数,要求分组函数返回的是单行数据。如下图为查询出薪水比本部门平均薪水高的员工信息:

单行子查询出现在HAVING子句中,如下图为查询出平均薪水高于部门30最高薪水的部门信息。

多行子查询

如果子查询返回了多行,则主查询中的比较操作符应该使用多行比较操作符。Oracle数据库中的多行比较操作符包括IN、ALL、ANY,其中ALL和ANY不能单独使用,需要配合单行比较操作符>、>=、<、<=一起使用。

多行子查询中使用IN: IN后面是值的列表,只不过这里的值是子查询查出来的多个数据。如下图:

多行子查询中使用ANY操作符: ANY操作符不能单独使用,必须和>、<等比较操作符一起使用。>ANY表示大于列表中任何一个数据即为TRUE;<ANY表示小于列表中的任何数据即为TRUE。具体实现如下图:

多行子查询中使用ALL操作符: ANY操作符也不能单独使用,必须和>、<等比较操作符一起使用。>ANY表示大于列表中所以数据即为TRUE;<ANY表示小于列表中的所以数据即为TRUE。具体实现如下图:

多列子查询

多列子查询是指在查询中返回多列数据,如果多列子查询返回的是一行,则使用单行比较操作符=、>、>=、<、<=、<>;如果是多行,则使用多行比较操作符IN、ALL、ANY。

多列子查询返回一行数据:

多列子查询返回多行数据:

其他子查询

行内视图: 行内视图也称作内嵌视图或匿名视图,简单地说就是出现在FROM短语中的子查询,这中语句把子查询当作视图对待,但这个视图没有名字,只在当前的SQL语句中有效。如下图:

EXIST条件: 使用EXIST条件的查询也称为相关子查询,就是在子查询中需要引用到主查询的字段数据。如果EXIST后面的子查询至少返回一行数据,则整个条件返回TRUE.如下图查询那些有员工的部门信息:

温馨提示

子查询要用括号括起来。
使用分组函数时在SELECT列表中出现的列和表达式必须出现在GROUP BY 子句中。
在Oracle9i以前版本,子查询不能包含ORDER BY子句。
为了增加可读性,子查询最好出现在比较符的右边
子查询卟仅仅可以出现在SELECT语句中,还可以出现在DML和DDL语句中
点击展开全文

更多推荐