一.定义
1.子查询定义:
select语句中嵌套select语句,被嵌套的select语句称为子查询。
2.子查询可以出现在哪里?
二.where子句中的子查询(单步合并)
总结:查询条件分步骤,然后合并
1.已知最低工资为800,现在需要完成以下查询:
Q:找出比最低工资高的员工的姓名和工资。
A:因为where子句中不能直接使用分组函数,所以:select ename,sal from emp where sal > min(sal)是错误的
应为:
Step1:查询最低工资:select min(sal) from emp;
Step2:找出薪资大于800的人的信息:select ename,sal from emp where sal > 800;
Step3:合并语句:select ename,sal from emp where sal > (select min(sal) from emp);
三.from子句中的子查询(表单拟存在,表单连接)
总结:from后子查询的查询结果作为临时表,和查询表进行连接
1.现在需要完成以下查询:
Q:找出每个岗位的平均工资的薪资等级。
A:
Step1:找出每个岗位的平均工资(按照岗位分组求平均值):
select job,avg(sal) from emp group by job;
Step2:把以上的查询结果就当做一张真实存在的表t,将t表和s表进行表连接:
select t.*,s.grade
from (select job,avg(sal) as avgsal from emp group by job) t
join salgrade s
on t.avgsal between s.losal and s.hisal;
Step3:最终结果:
四.select子句中的子查询(唯一性嵌套)——理解即可
总结:对于select后面的子查询来说,这个子查询只能一次返回1条结果,多于1条,就报错
1.现在需要完成以下查询:
Q:找出每个员工的部门名称,要求显示员工名,部门名。
A:
语句:
select e.ename,e.deptno,(select d.dname from dept d where e.deptno = d.deptno) as dname
from emp e;
最终结果: