oracle分页

oracle rownum
    oracle select语句会为查询结果自动添加一列`rownum`,该列是select结果集从1开始编号直至最后
    Mysql中有offset和limit,能很容易的实现分页,但是Oracle中没有,在Oracle中实现分页只能借助于伪列rownum
    rownum被称为伪列


分页第一种写法
    -- 定位到第一页
    select * from emp where rownum<5;

    -- 定位到第二页
    select tmp.* from (select rownum r,emp.* from emp where rownum<9) tmp where r>4;

    -- 定位到第三页
    select t.empno,t.ename,t.job from (select rownum r,emp.empno,emp.ename,emp.job from emp where rownum<13) t where r>8;
    select t.empno,t.ename,t.job from (select rownum r,emp.empno,emp.ename,emp.job from emp where rownum<[@1]) t where r>[@2];
    -- 页容量 size {1,2,3,...}页编号 pagenum{1,2,3,...}
    -- 参数@1:size*pagenum + 1
    -- 参数@2:size*(pagenum-1)

分页第二种写法
    第二种写法实际上就是第一种写法的粗暴版本,在许多框架中采用这样的写法,第一种写法效率优于第二种写法
    select t.empno,t.ename,t.job from (select rownum r,emp.* from emp)t where t.r>4 and t.r<9; 
    select t.empno,t.ename,t.job from (select rownum r,emp.* from emp)t where t.r>[@1] and t.r<[@2]; 
    -- 页容量 size {1,2,3,...}页编号 pagenum{1,2,3,...}
    -- 参数@1:size*(pagenum-1)
    -- 参数@2:size*pagenum + 1

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1