子查询是嵌入到另一个SELECT语句当中的SELECT语句。通过子查询,可以使用简单的语句组成强大的语句。当需要从表中选择行,而选择条件却取决于该表自身的数据时,子查询非常有用
子查询主要分为以下两种基本类型,单行子查询,多行自查询。另外,还有3种类型,多列子查询,关联子查询,嵌套子查询。

HAVING是在分组统计后用于过滤行,同样在HAVING子句后面可以跟子查询。
如:统计平均工资高于公司平均工资的部门


使用子查询时还需注意:子查询中不能使用ORDER BY子句进行排序。
2,多行子查询
内部SELECT语句给外部的SELECT语句返回1行或多行
在父查询中,可以使用IN、 ANY、 WHERE操作
Select * from emp
Where deptno in (select deptno from dept);
同样也可以使用NOT IN检查一个值是否不在指定的列表中
例: 使用 ANY 查询任意满足工资低于平均档的员工信息
Select empno, ename sal from emp
Where sal < any(select avg(sal) from emp group by deptno);
3,多列子查询
子查询还可以包含多列
如:查询出每个部门的最低工资,再查出满足这些条件的员工信息
4,关联子查询
子查询引用与父查询相关的一列或多列,子查询需要借助父查询,而父查询也要借助子查询,子查询要为父查询的每一行运行一次。
如:要查出每个部门中,高出部门平均工资的员工编号和姓名
首先:查出每个部门的平均工资
代替解法:
5,嵌套子查询
SQL提供嵌套子查询机制,即:在一个查询中嵌套另一个SELECT...FROM...HWERE查询语句,子查询中嵌套子查询,最多可嵌套255层
如:查询工资高于 'SMITH' 工资的员工信息
6,在UPDATE语句中使用子查询
如:将empno为7900的员工工资更新为工资等级表中的最高平均工资。
7,在DELETE语句中使用子查询
列:删除工资高于平均工资的员工