Oracle 中取前幾條記錄(分頁)

Oracle中用於類似MSSQL中top的關鍵字爲rownumber,具體用法如下:
select firmcode,balance from (
                 select   rownum   rn,t.firmcode,t.balance
                 from FIRMBALANCE_TAB t
                 order by balance desc
          ) tab
          where tab.rn >0 and tab.rn < 11;


注:tab指的是: select   rownum   rn,t.firmcode,t.balance   from FIRMBALANCE_TAB t        order by balance desc
查詢得到的結果集.
tab.rn 指的是:select rownum rn
rownum是oracle給出的一個用來表明當前記錄位置的一個字段 

下面的也是正確的:
select firmcode from FirmTable where rownum < 10 取前十條記錄;
select firmcode from firmTable where rownum = 1 取第一條記錄
但是下面是不正確的:
select firmcode from firmTable where rownum = 2 ,因爲rownum都是從1開始的,沒第一條不可能出來第二條的
另外,按oracle 9i參考手冊所言,如果跟order by的話需要用嵌套查詢:
If you embed the ORDER BY clause in a subquery and place the ROWNUM condition in the top-level query, then you can force the ROWNUM condition to be applied after the ordering of the rows. For example, the following query returns the 10 smallest employee numbers. This is sometimes referred to as a "top-N query":
因爲rownum是已經排序好的結果集中的行號,並且用在最上層的限制中.
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章