DB2sql——fetch first n rows only


  在db2中如果想獲取前n行,只要加上fetch first n rows only 就可以了,但在oracle中沒有fetch,網上很多人說可以用oracle的rownum<=n來替代db2的fetch first n rows only,但這樣的替換,在對結果集需要進行order by之后再獲取前n行時,是不對的。根據我的試驗,rownum的順序好像是和rowid相對應的,而rowid的順序是根據插入表中的數據的順序有關(不知道oracle真正的實現機制是不是這樣,有時間找本oracle的書系統研究一下)。看下面oracle中的實例:

SQL>select rownum,id,age,name from loaddata;
     ROWNUM ID     AGE NAME
     ------- ------ --- ------
         1 200001 22   AAA
         2 200002 22   BBB
         3 200003 22   CCC
         4 200004 22 DDD
         5 200005 22   EEE
         6 200006 22   AAA

SQL>select rownum ,id,age,name from loaddata order by name;
     ROWNUM ID     AGE NAME
     ------- ------ --- ------
         1 200001 22   AAA
         6 200006 22   AAA
         2 200002 22   BBB
         3 200003 22   CCC
         4 200004 22   DDD
         5 200005 22   EEE

    所以,要是想排序后在取前幾行,可以用子查詢select rownum ,id,age,name from (select * from loaddata order by name);

    但我覺得既然要使用子查詢,與其使用oracle的特定函數rownum,倒還不如使用標准sql的函數row_number() over ()。可以這樣寫select id,age,name from (select row_number() over (order by name) as row_number,id,age,name from loaddata ) where row_number<n; 這樣的話就不用考慮是在db2還是oracle下了,都一樣用


免責聲明!

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



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