Oracle数据库分页查询的几种实现方法

没有Sql Server有top那么好用,但是Oracle含有隐藏的rownum列可以灵活使用,使实现分页效果,pageSize默认10行

方法一:

select * from test where id not in (
select id from test where rownum <= 10)
and rownum <= 10 order by id
/--此方法除去前10行数据,剩下的重新排序,选取前十行,相当于第二页显示

方法二:

SELECT * from test where  rownum <= 20 
minus
select * from test  where rownum <= 10
/
--此方法使用关键字minus 选出两页 再排除第一页 数据 ,使其显示第二页数据

方法三:

select id ,name from(
select rownum as rowno,t.* from test t where rownum <= 20) 
where rowno > 10
/--此方法把rownum直接显式保存到结果集中,然后根据rowno方便选取数据,与方法一,类似..

  以上三种方法有严重的缺陷,分页一般是排序之后再分页,以上方法都没有实现排序,所以基本没有实际意义的,所以实际运用中要先排序,然后再进行分页

例如

select sno, sname, cname, degree from --最外层的table是利用rownum别名,查找出最终需求的记录(确定最小记录数)
				(        --中间这个table是含有rownum where条件的,查找出已经排好序的最大 需求行以内记录(确定最大记录数)     
                                        select sno, sname, cname , degree,rownum r from
                                          (              --最里边这个是先排序后查找的table                             
                                                 select i.sno,sname,cname,degree 
                                                 from score s ,info i , course c 
                                                 where s.sno = i.sno and c.cno = s.cno 
                                                 order by i.sno asc
                                           )  
                                        where rownum <= 10
                                )
				 where r > 5 
         
--最大记录数与最小记录数存在某种数学关系(rows = max - min),可在逻辑中使用                    

  

  

 

转载于:https://www.cnblogs.com/whytohow/p/5026343.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值