Oracle分页

ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。

为什么Oracle只能使用嵌套完成分页?

原因:先执行from生成虚拟表1,再判断虚拟表1每条记录是否符合where条件,拿出的第一条时rownum为1,判断不成立则删除,再拿出的一条数据时rownum仍是设置为1,只有符合where条件时,下一条rownum才会加1。

例如:

select * from tablename where rownum > 1; --无数据:拿出虚拟表1第一条数据时,rownum=1, where rownum > 1不成立;拿出虚拟表1第二条数据时,rownum=1, where rownum > 1不成立;如此查不到数据。

select * from tablename where rownum = 1;--有第一条数据

select * from tablename where rownum <= 5;--有前五条数据

 

按照这样的逻辑,所以where中rownum只能用于查询  <=、<  、=1

 

分页查询

select b.* from (select a.*,rownum rn from tablename  a where rownum <=5) b where rn >=3;

select b.* from (select a.*,rownum rn from tablename  a) b where rn between 3 and 5;

 

带排序的分页查询:

注意:sql执行顺序:order by 在where之后

select * from (select rownum rn,a.* from (select * from tablename order by sal desc) a)  where rn>=5 and rn <=9;

--通过分析函数row_number来分页

select * from (select row_number() over (order by sal) as rn,a.* from tablename a) b where b.rn>=5 and b.rn<=9;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值