Oracle SQl语句----使用rownum分页

本文深入解析了Oracle ROWNUM在查询条件中的应用,特别针对使用'>'号的问题及与ORDER BY同时使用时的注意事项。通过实例演示了如何解决这些问题,包括直接嵌套查询和使用row_number()函数进行排序的方法。
ROWNUM:

说明:rownum是一个伪字段,标示查询字段的序号;
使用:select rownum 序号 from table
注意
一、rownum 使用 '>' 号的问题
select * from emp where rownum>3、
查询不到结果
原因:rownum是在使用select查询的时候,自动生成的一串顺序号。
     在每返回一条数据结果的时候,rownum就自动加一
     当select 一条数据 rownum 为 1 不>3 记录被筛去 
     而下一条 数据 rownum 又是 1.。。。。。。。

解决:加一层嵌套

二、rownum 与 order by 同时使用会出现问题 
rownum 是不支持order by 排序的。因为rownum是在排序之前取值的。

"在oracle中如果rownum与order by同在,是先rownum,然后再order by "

oracle手册上说的:“即使select语句中一条简单的order by都可能会搞乱ROWNUM(因为ROWNUM是排序前分配给各行的)

如图所示:(RN 列顺序错误
                                            

解决方式

1、直接嵌套:(增加了两次查询,被嵌套的查询结果相当于视图,view中已经有rownum字段 所以可以使用 > 号)
select t2.* from(      --解决>号问题
  select t1.*,ROWNUM rn from ( --解决order by 的影响
  select
       k.bmxh,
       k.byxxdm, 
       z.zgdm,
       z.dqdm, 
       zd.zgmc,
       zd.fz
  from zgjf z
  left join    ks k      on      z.bmxh = k.bmxh
  left join    zgdm zd   on z.zgdm = zd.zgdm
 order by bmxh asc, z.zgdm asc
 )t1
 )t2 where rn > 2 and rn <10

2、使用row_number() over(order by COLUMN_NAME) 改变顺序,先执行了括号中的order by
 select z.* ,row_number() over ( order by z.bmxh ) rn from  zgjf z where rownum <10 and rownum >5
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值