数据准备:
(1)部门表department
(2)员工表staff
一、概述
在SQL 语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。
二、类型
1、带有IN 谓词的子查询
eg:查询与小王在同一个部门的员工
步骤:
(1)先查询小王所在部门:select dep_id from staff where name='小王'; 结果为dep_id=102;
(2)查询dep_id=102的所有员工:select * from staff where dep_id=102;
(3)将第一步查询嵌入到第二步查询的条件中
2、带有比较运算符的子查询
eg:查询大于等于平均年龄的员工
3、带有ANY(SOME) 或 ALL谓词的子查询
(>,>=,<,<=,=)ANY | (大于|大于等于|小于|小于等于|等于)子查询结果中的某个值 |
(>,>=,<,<=,=)ALL | (大于|大于等于|小于|小于等于|等于)子查询结果中的所有值 |
!=(或<>)ANY | 不等于子查询结果中的某个值 |
!=(或<>)ALL | 不等于子查询结果中的任何一个值 |
子查询返回单值时可用比较运算符,但返回多值时要用ANY或ALL谓词修饰符。
eg:查询比技术部所有员工平均年龄小的员工信息
4、带有EXISTS谓词的子查询
不返回任何数据,只产生逻辑真值"true"或逻辑假值"false"。若内层查询结果非空,则外层的WHERE子句返回真值,否则返回假值。
eg:查询技术部的所有员工信息