Oracle分页查询

分页查询使用的是rownum伪列,他会根据读取的记录成成一个数字。
先来看一下rownum的基本使用:

select * from emp where rownum >= 1; -- 这个可以查询emp表的所有数据
select * from emp where rownum > 1; 
select * from emp where rownum > 10;-- 这个两个查询不出来数据
-- 因为在查询数据的rownum是从1开始的
-- 即当查询第一条记录的时候rownum=1,不满足条件就舍去第一条记录
-- 在查询第二条记录的时候rownum就又是1,不满住要求,继续舍去....

注意事项
1、不能对rownum使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值)
2、rownum是从1开始的,第一条不满足去掉的话,第二条的rownum 又成了1。

分页查询

下面是分页查询的基本格式:

select * from 
       (select T.*, rownum rn from
               (select * from tab) T
               where rownum <= page*pagesize)
        where rn > (page - 1)*pagesize;
-- page表示显示的页数,pagesize表示每页的大小

下面看一个实例:

select * from 
       (select A.*, rownum rn from 
               (select * from emp ) A
                where rownum <= 3*3) 
        where rn>(1-0)*3; 
-- 查询emp表的第3页内容,每页的大小是3

相同的要求,也可以这样写:

select * from 
       (select A.*, rownum rn from
               (select * from emp ) A
       )
       where rn between (1-0)*3 and 3*3;

但是,大部分情况下,第一个查询的效率比第二个高的多。
因为在Oracle的CBO的模式下,oracle会将外层的查询条件推到内层中,来提高查询结果。第一个查询,oracle会将第二层的查询条件推到最内层中,一旦内层的查询不满住条件就不会执行,这样就减少了不必要的查询,效率自然要比第二个的查询要快。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值