oracle分页查询(面试)

本文探讨了Oracle数据库中的分页查询,重点讲解了ROWNUM的使用和限制。通过两个分页查询格式的示例,说明了如何有效进行分页操作,并提醒了在使用ROWNUM时需要注意的陷阱,如不能直接用ROWNUM与大于号进行比较的原因。
摘要由CSDN通过智能技术生成

ROWNUM

rowid与rownum虽都被称为伪列,但它们的存在方式是不一样的:

rowid是物理存在的,表示记录在表空间中的唯一位置ID,在DB中是唯一的。只要记录没被搬动过,rowid是不变的。

rowid相对于表来说又像表中的一般列,所以,以rowid为条件就不会有rownum那么莫名其妙的结果出现。

rownum是真正的伪列,不管是数据库中物理表,还是嵌套子查询都会有rownum这个伪列,rownum总是从1开始的,第一条不满足去掉的话,第二条的rownum又成了1。

另外还要注意:rownum不能以任何基表的名称作为前缀

 

目前表中的数据如下:


 

 

1.分页查询格式1:

oracle嵌套子查询也具有伪列,可以使用别名来区别物理表和嵌套子查询语句的rownum


 

在查询的最外层控制分页的最小值和最大值。查询语句如下:

①首先获取伪列,并取别名rn。注意:伪列必须要有别名,因为嵌套子查询也有伪列rownum

select t.*, rownum rn from employee t

②使用rn进行分页查询

select t1.* from (select t.*, rownum rn from employee t) t1 where t1.rn > 10 and t1.rn < 20;

思考:这里为什么不能使用如下SQL语句来进行分页查询,查询结果是什么?

select t.*,rownum from employee t where rownum > 10 and rownum < 20;

解释:详情查考oracle中rownum为什么不能使用>符号来进行比较

 

2.分页查询格式2:

select t2.*
  from (select t1.*, rownum rn
          from (select * from employee where rownum < 20) t1) t2
 where rn > 10

 

3.分页查询格式3:

考虑到多表联合情况,如果不介意在系统中使用HINT的话,可以将分页查询语句改为:

select /*FIRST_ROWS*/ *
  from (select t1.*, rownum rn
          from (select * from employee where rownum < 20) t1) t2
 where rn > 10

解释:HINT

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值