子查询是嵌入到另一个SELECt语句当中的SELECT语句。通过子查询,可以使用简单的语句组成强大的语句。当需要从表中选择行,而选择条件却取决于该表自身的数据时,子查询非常有用
子查询主要分为以下两种基本类型,单行子查询,多行自查询。另外,还有3种类型,多列子查询,关联子查询,嵌套子查询。
1,单行子查询 内部SELECT语句给外部的SELECT语句返回0行或1行。可以在SELECT语句后面的WHERe、HAVINg、FROM后面放置单行子查询。 1-1,在where子句中使用子查询 将另一个查询作为where子句的子查询 在单行子查询中还可以使用其他比较运算符,比如<> > < >= <= 如:查询工资比平均工资高的员工信息 1-2,在having子句中使用子查询HAVINg是在分组统计后用于过滤行,同样在HAVINg子句后面可以跟子查询。
如:统计平均工资高于公司平均工资的部门 1-3,在from子句中的子查询 将子查询放在from子句后为其提供数据 使用单行子查询时有时会出现一些错误: 如: 如果子查询返回的结果是多行,而其使用的是比较运算符,将会出现错误
使用子查询时还需注意:子查询中不能使用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语句中使用子查询
列:删除工资高于平均工资的员工



