SQL_查詢第n行數據的兩種方法


  SQL在取數據的時候,可以通過ROWNUM這一偽列獲取行號。由於ROWNUM一定是從1開始的,因此,直接在WHERE子句使用

WHERE ROWNUM = 10

  是不可取的。如果想要取到第n行數據,有兩種方式:

  (1)獲取前n行,倒序排列,再獲取第一行數據

SELECT *
FROM (
     SELECT *
     FROM copy_emp
     WHERE ROWNUM <= 1825574
     ORDER BY ROWNUM DESC)
WHERE ROWNUM = 1;

  (2)獲取行號+所有數據,將行號存成一列 rn

SELECT empno, ename, new_sal
FROM (
     SELECT ROWNUM rn, copy_emp.*
     FROM copy_emp
     WHERE ROWNUM <= 1825574)
WHERE rn = 1825574;

  其中第二種優於第一種,原因是,order by消耗了更多時間。

  我構造了一個具有3670016行的數據如下,分別查詢第1825574行的數據:

SELECT COUNT(*) FROM copy_emp;

  

  得到的結果如下:

  (1)

  

  (2)

   

  因此,當根據行號查詢數據時,推薦使用第二種,即將ROWNUM存成單獨的一列,再進行查詢。


免責聲明!

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



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