Oracle数据库中分页功能

 


分页:
    rowid:
        1)是一个伪列,由系统自动产生
        2)能唯一标识每一条数据库行记录的物理地址,通过rowid能快速定位到一条行记录
    rownum:伪列,一行的行号(从1开始计),数据结果集输出时添加行号
        注意点:
            1)rownum不能与>,>=(除了1),between..and一起使用;可以与<,<=,<>一起使用
            2)rownum与order by一起使用会造成行号会乱,且数据不一定正确

rownum原理:
    rownum是在记录输出时才生成,且总是从1开始,查出的数据若满足条件则计为1,若不满足条件则去掉,不计数,继续查询下一条记录,其余同上;

rownum不能与>,>=(除了1)使用原因:
    若rownum>1,当查询出第一条记录,rownum计为1,但是不满足rownum>1的条件,所以该记录去掉,查询下一条记录,下一条记录仍计为1,又不满足,依次进行,循环,始终查不到值,故查询不到结果
    
分页的实现:top-n查询
    1)不排序:
        SELECT *  
        FROM (SELECT  ROWNUM  rn ,表名.* FROM 表名 WHERE ROWNUM<=每页的行数*页数)  t
        WHERE t.rn>=每页的页数*(页数-1)+1;
    2)排序:
        SELECT tt.* FROM (
        SELECT ROWNUM  rn,t.*
        FROM (SELECT * FROM 表名 ORDER BY sal) t  WHERE ROWNUM<=每页的行数*页数) tt
        WHERE tt.rn>=每页的页数*(页数-1)+1;

PS:
    1)分页不一定能和分组group by一起使用,
        如:查询每个部门的工资最高的前几名,无法实现
    2)可以用集合运算


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值