子查询
3、子查询?
3.1、子查询:select语句中嵌套select语句,被嵌套的select语句称为子查询。
3.2、子查询都可以出现在哪里?
select
..(select)
from
...(select)
where
...(select)
3.3、where子句中的子查询
案例:找出比最低工资高的员工姓名和工资?
select ename,sal from emp where
思路:
第一步:查询最低工资是多少
select min(sal) from emp;
第二步:找出>800的
select ename,sal from emp where sal > 800;
第三步:合并
select ename,sal from emp where sal > (select min(sal) from emp);
3.4、from子句中的子查询
注意:from后面的子查询,可以将子查询的查询结果当做一张临时表。(技巧)
案例:找出每个岗位的平均工资的薪资等级。
第一步:找出每个岗位的平均工资(按照岗位分组求平均值)
select job,avg(sal) from emp group by job;//t表
第二步:把上面查询结果当做一张表,t表和s表进行表连接,t表avg(sal) between s.losal and s.hisal;
select t.*,s.grade from t join salgrade s on t.avg(sal) between s,losal and s.hisal;
第三步:合并
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;
3.5、select后面出现的子查询(这个内容不需要掌握,了解即可!!!)
案例:找出每个员工的部门名称,要求显示员工名,部门名?
select e.ename,e.deptno,(select d.dname from dept d where e.deptno = de.deptno) as dname from emp e;
select e.ename,e.deptno,(select dname from dept) as dname from emp e;//没加select嵌套条件,
注意:对于select后面子查询,该子查询只能一次返回1条结果,多于一条会报错