天天看点

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

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