天天看點

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