SQL查询:[6]子查询
在SELECT查询时,在WHERE查询条件中的限制条件不是一个确定的值,而是来自另一个查询的结果,这种为主查询提供数据而首先执行的查询语句叫做子查询。根据返回结果的不同,子查询可分为单行子查询、多行子查询和多列子查询。
单行子查询
- 01
单行子查询指在子查询中只返回单行值,这种子查询需要使用单行比较运算符,包括=、>、>=、<、<=、<>.
- 02
单行子查询出现在WHERE子句中,如下所示:
- 03
单行子查询中有分组函数,要求分组函数返回的是单行数据。如下图为查询出薪水比本部门平均薪水高的员工信息:
- 04
单行子查询出现在HAVING子句中,如下图为查询出平均薪水高于部门30最高薪水的部门信息。
多行子查询
- 01
如果子查询返回了多行,则主查询中的比较操作符应该使用多行比较操作符。Oracle数据库中的多行比较操作符包括IN、ALL、ANY,其中ALL和ANY不能单独使用,需要配合单行比较操作符>、>=、<、<=一起使用。
- 02
多行子查询中使用IN: IN后面是值的列表,只不过这里的值是子查询查出来的多个数据。如下图:
- 03
多行子查询中使用ANY操作符: ANY操作符不能单独使用,必须和>、<等比较操作符一起使用。>ANY表示大于列表中任何一个数据即为TRUE;<ANY表示小于列表中的任何数据即为TRUE。具体实现如下图:
- 04
多行子查询中使用ALL操作符: ANY操作符也不能单独使用,必须和>、<等比较操作符一起使用。>ANY表示大于列表中所以数据即为TRUE;<ANY表示小于列表中的所以数据即为TRUE。具体实现如下图:
多列子查询
- 01
多列子查询是指在查询中返回多列数据,如果多列子查询返回的是一行,则使用单行比较操作符=、>、>=、<、<=、<>;如果是多行,则使用多行比较操作符IN、ALL、ANY。
- 02
多列子查询返回一行数据:
- 03
多列子查询返回多行数据:
其他子查询
- 01
行内视图: 行内视图也称作内嵌视图或匿名视图,简单地说就是出现在FROM短语中的子查询,这中语句把子查询当作视图对待,但这个视图没有名字,只在当前的SQL语句中有效。如下图:
- 02
EXIST条件: 使用EXIST条件的查询也称为相关子查询,就是在子查询中需要引用到主查询的字段数据。如果EXIST后面的子查询至少返回一行数据,则整个条件返回TRUE.如下图查询那些有员工的部门信息: