第五章 :解决实际问题
案例一:分页查询显示员工信息:显示员工号,姓名,月薪
--每页显示四条记录
--显示第二页的员工
--按照月薪降序排列
select empno,ename,sal from emp order by sal desc;
--rownum 行号(永远从1开始),只能使用<,<=,不能使用>,>=
select r,empno,ename,sal
from (select rownum r,empno,ename,sal
from (select rownum,empno,ename,sal from emp order by sal desc) e1
where rownum<=8) e2
where r>=5;--r是e2表的第一列,变成不是伪列的值
案例2:找到员工表中薪水大于本部门平均薪水的员工
select * from emp ;
--部门平均薪水
select deptno,avg(sal) from emp group by deptno;
----------------------------------------------------------
explain plan for
select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal
from emp e
where sal>(select avg(sal) from emp where deptno=e.deptno);
select * from table (dbms_xplan.display);
----------------------------------------------------------
explain plan for--解释计划
select *
from emp e ,(select deptno,avg(sal) avgsal from emp group by deptno) d
where e.deptno=d.deptno and e.sal>d.avgsal;--多表查询,嵌套子查询
--查看执行计划
select * from table (dbms_xplan.display);--占用CPU更少