Oracle 分页的三种实现

2014-11-24 18:43:16 · 作者: · 浏览: 0

第一种采用rowid 4层
第二种是用 rownum分页 3 层 (oracle规定:每次查询中 rownum只能用一次)
第三种是 采用分析函数来实现


select * from (select row_.*,rownum rn from (select empno,ename,sal from scott.emp where sal>800 order by sal ) row_ where rownum<11) where rn>5;


3.使用 rowid分页(如果查询里面有 排序了,在最外面也要排序)


select * from emp where rowid in (select rid from (select rownum rn,rid from (select rowid rid,sal from emp where sal>800 order by sal) where rownum<11) where rn>5) order by sal; //发现不能和group by 使用,有人说是oracle的bug。所以 一般人都用 rownum分组


4.采用分析函数


select * from (select e.*,row_number() over(order by sal) rk from emp e where e.sal>800) where rk<11 and rk>5 // 这个 在数据量比较多的时候 速度严重下降,所以一般人也不选这个.