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
);