-
ROWNUM的知识点
A ROWNUM按照oracle的默认机制生成。
B rownum只能使用<= <号,不能使用> >=
-
rownum的实现机制
rownum表示,返回的结果集的行号(是一个属性,固化到一行之中,不会因为你排序,而发生变化)。没有第一行,就没有第二行;没有第二行就没有第三行。
-
Oracle Top-N
select rownum,empno,ename,sal
from (select empno,ename,sal
from emp
order by sal desc)
where rownum <= 3;
4 求5=<x<=8之间的数据(分页)
select r,empno,ename,sal
from
(
select rownum r,empno,ename,sal
from (
select empno,ename,sal
from emp
order by sal desc
)
where rownum <=8
)
where r >= 5;
总结:内存排序,外层选
Oracle分页思想总结:
(内层排序,外层选,需要三层查询)
内:排序
中:使用rownum选择前n条;并给rownum指定一个别名,以供最外层过滤使用。
外:去掉前m条结果。
-
找到员工表中薪水大于本部门平均薪水的员工
员工表 本部门平均薪水
思路1:查员工的薪水 本部门平均薪水
本部门关系
要去本部门的薪水,需要求部门的薪水,要对部门分组è分组
思路2:查找员工表 和 部门薪水表 =====》多表查询
思路3:等值连接条件
方法1:
select e.empno,e.ename,e.sal,d.avgsal
from emp e,
(select deptno,avg(sal) avgsal
from emp
group by deptno) d
where e.deptno=d.deptno and e.sal > d.avgsal;
方法2
相关子查询:主查询的参数,让子查询用,一般是通过别名技术。
一般子查询:子查询的结果,被主查询使用
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
);