用rownum先排序后分頁


  今天突然想到rownum可以解決分頁問題,於是做了各種實驗,找個幾個文章,最后有了一定成果。

  現有表tablename,含有字段showorder,要求提取showorder的第11行到20行數據。

  用語句select rownum r,a.* from tablename a order by showorder進行查詢的時候會發現結果集中rownum是在排序之前賦的值,因此如果需要按showorder提前的話應該先將tablename按showorder排序,將排序后的結果集按rownum提取。

  用語句SELECT ROWNUM r, a.* FROM (select * from tablename order by showorder) a WHERE ROWNUM <= 20 可以查出前20條,但如果過濾條件變成rownum<=20 and rownum >=10,就會發現結果集一條數據都沒有,因為rownum是提取數據,將數據操作完成之后再進行標記行號,關於這點,有個作者寫的很好http://blog.csdn.net/greenappple/article/details/6872660,大家可以看看。

  剩下的操作是將標記好行號的前20條數據提取后十條。

  SELECT *  FROM (SELECT ROWNUM r, a.* FROM (select * from tablename order by showorder) a WHERE ROWNUM <= 20 )  WHERE r >= 11;

  上面的語句用plsql執行時用了0.078秒,等同於plsql查詢上千行的表時只查處了前十條的時間。

  網上有很多好文章寫着塊的,此處只記載了適用於我的方面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM