-- 练习题-- 我们求平均薪水的等级最低的部门,它的部门名称是什么,我们完全使用子查询-- 求平均薪水select DEPTNO,avg(sal)from EMP
groupby DEPTNO;-- 求平均薪水的等级select e.*,s.GRADE
from(select DEPTNO,avg(sal) avg_sal
from EMP
groupby DEPTNO) e
join SALGRADE s on e.avg_sal between s.LOSAL and s.HISAL;-- 求薪水最低的部分selectmin(e2.GRADE)from(select e.*, s.GRADE
from(select DEPTNO,avg(sal) avg_sal
from EMP
groupby DEPTNO) e
join SALGRADE s on e.avg_sal between s.LOSAL and s.HISAL) e2;-- 求平均薪水的等级最低的部门的部门名称select d.DEPTNO,d.DNAME
from DEPT d
join(select e.DEPTNO, s.GRADE
from(select DEPTNO,avg(sal) avg_sal
from EMP
groupby DEPTNO) e
join SALGRADE s on e.avg_sal between s.LOSAL and s.HISAL) t
on t.DEPTNO = d.DEPTNO
where t.GRADE =(selectmin(e2.GRADE)from(select e.*, s.GRADE
from(select DEPTNO,avg(sal) avg_sal
from EMP
groupby DEPTNO) e
join SALGRADE s on e.avg_sal between s.LOSAL and s.HISAL) e2);-- 查看sql语句,能发现sql中有许多重复的子查询,可以通过视图将重复的语句给抽象出来createview v_deptno_grade asselect e.*, s.GRADE
from(select DEPTNO,avg(sal) avg_sal
from EMP
groupby DEPTNO) e
join SALGRADE s on e.avg_sal between s.LOSAL and s.HISAL;-- 使用视图进行查询select d.DEPTNO,d.DNAME
from DEPT d
join v_deptno_grade t
on t.DEPTNO = d.DEPTNO
where t.GRADE =(selectmin(e2.GRADE)from v_deptno_grade e2);