子查询
什么是子查询?
子查询就是嵌套的select语句,可以理解为子查询是一张表。
- 子查询可以出现在哪里?
select
..(select).
from
..(select).
where
..(select).
where语句中使用子查询
- 案例:找出高于平均薪资的员工信息。
- 第一步:找出平均薪资
select avg(sal) from emp;
- 第二步:取得大于平均薪水的员工
select * from emp where sal > 2073.214286;
- 第一步和第二步合并
select * from emp where sal > (select avg(sal) from emp);
- 第一步:找出平均薪资
from后面嵌套子查询
- 案例:找出每个部门平均薪水的等级。
- 第一步:找出每个部门平均薪水(按照部门编号分组,求sal的平均值)
select deptno,avg(sal) as avgsal from emp group by deptno;
- 第二步:将以上的查询结果当做临时表t,让t表和salgrade s表连接,条件是:t.avgsal between s.losal and s.hisal
- 第一步:找出每个部门平均薪水(按照部门编号分组,求sal的平均值)
select
t.*,s.grade
from
(select deptno,avg(sal) as avgsal from emp group by deptno) t
join
salgrade s
on
t.avgsal between s.losal and s.hisal;
在select后面嵌套子查询。
- 案例:找出每个员工所在的部门名称,要求显示员工名和部门名。
- 第一种做法,将员工表和部门表连接
select e.ename, d.dname from emp e, dept d where e.deptno=d.deptno;
- 第二种做法,在select语句中再次嵌套select语句完成部分名称的查询
select e.ename, (select d.dname from dept d where e.deptno=d.deptno) as dname from emp e;
- 第一种做法,将员工表和部门表连接