子查询
-
是一个查询语句中包含了另一个查询语句
-
作用:
-
作为条件:
-
例如:
-
标量子查询:查询雇员的薪资高于‘clark’的雇员信息;
-
行子查询:查询雇员表中部门职位与‘Allen’相同的雇员信息;
-
列子查询:查询部门20中能够同部门10中职位相同的雇员信息(使用in的列子查询)
-
(使用any或者some列子查询)
- any:返回结果中的任何一个数据
- some是any的别名,很少使用
- 例如:查询雇员emp表中月薪低于任何一个clerk的月薪的雇员
-
使用all的列子查询:all指返回结果中的所有数据
- 例如:查询雇员emp表中月薪不低于所有‘clerk’月薪的雇员信息
-
使用exists列子查询:exists表示存在的意思;使用exist是关键字时,子查询语句返回的并不是查询记录的结果集,而是一个布尔类型的值,如果子查询有满足条件的纪录,则返回true,会执行查询;如果没有满足条件的记录,则返回false,则不会执行主查询。
- 例如:查询dept表中有雇员的部门信息
-- 查询雇员的薪资高于‘clark’的雇员信息 select * from emp where sal>(select sal from emp where ename='clark') -- 查询雇员表中部门职位与‘Allen’相同的雇员信息 select * from emp where (deptno,job)=(select deptno,job from emp where ename='allen') -- 查询部门20中能够同部门10中职位相同的雇员信息 select * from emp where job in (select job from emp where deptno=10) and deptno=20 -- 查询雇员emp表中月薪低于任何一个clerk的月薪的雇员 select * from emp where sal < any(select sal from emp where job='clerk') -- 查询雇员emp表中月薪不低于所有‘clerk’月薪的雇员信息 select * from emp where sal < all(selelct sal from emp where job='clerk') -- 查询dept表中有雇员的部门信息 select * from dept where exists (select ename from emp where deptno=dept.deptno)
-
-
作为表:
-
-
例如:查询emp表中,每个部门平均工资最高的工资
-- 1.查询每个部门的平均工资 select avg(sal) from emp group by deptno -- 2.子查询作为一张表,查询最高平均工资,注意要给子查询表起个名字 select max(avgsal) from (select avg(sal) avgsal from emp group by deptno) avg_sal