oracle分页rownum

rownum是对查询的结果集加上的一个伪列,先查询出来有一个结果集,然后再在这个结果集上加一个伪列,也就是说先有查询结果集,再有rownum,它不属于数据库的列,而且它的值总是从1开始排起的,或者说它是对查询符合条件的结果集的序列号,所以它总是先有1,再有2,等等。

所以你不可能查询出rownum是从2开始的,这样:

rownumc1
2value1
3value2

查询不可能查出这样的结果集,不管怎样,rownum首先是从1开始计数起的。

rownum是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如 果你用>,>=,=,between……and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下 条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。

那oracle数据库读取数据的顺序是怎样的呢,是根据你插入数据库的顺序来排的,比如先插入value1,再插入value2,...,再查询出的结果集,顺序是这样的:value1,value2...

一般分页都是这样写的:

select * from 
(select rownum as rn, d.* from dept d) d1
where rn >= 1 and rn <= 3
这样有点问题,因为先全部查询符合条件的结果集d1的行数可能是很多的,可能你分页的每一页只需要一部分,那大于你行数的数据就没必须查出来了,下面请看。

这样再高效:

select * from 
(select rownum as rn, d.* from dept d where rownum <=3 ) d1
where rn >=1
先查出行数<=3的结果集d1,再从子查询结果集d1中帅选出行数>=1的结果集。这样就避免了全部查出符合条件数据过多。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值