Oracle分页:rownum从1开始查询没有问题,下一页出现问题

如题:Oracle分页查询在rownum从1开始可以查出数据,但是从其他数字开始就不能查出数据。

如图:rownum从1到10:


但是rownum 从11到20就不能查出数据(实际数据大于11):

原因分析:

    rownum总是从1开始的,第一条不满足去掉的话,第二条的rownum 又成了1。依此类推,所以永远没有满足条件的记录。

 可以这样理解:rownum是一个序列,是Oracle数据库从数据文件或缓冲区中读取数据的顺序。 它取得第一条记录则rownum值为1,第二条为2。依次类推。

    当使用“>、>=、=、between...and”这些条件时,从缓冲区或数据文件中得到的第一条记录的rownum为1,不符合sql语句的条件,会被删除,接着取下条。下条的rownum还会是1,又被删除,依次类推,便没有了数据。

修正方案:

    嵌套外层查询:

select * from (
select rownum as rn,t.* from com_user t 
)where 1=1 and rn between 11 and 20

效果如下:

备注:上面的查询方法比较容易写,但是效率稍微差一点,效率高的查询方法是:

上限条件必须放在子查询,而下限条件必须放在外层查询。

select *
  from (select rownum as rn, t.* from com_user t where rownum <= 20)
 where 1 = 1
   and rn >= 11
最终一样的效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值