db2中的fetch first n rows與oracle中的rownum 在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中的實例: www.2cto.com 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下了,都一樣用