ORACLE取中間幾條記錄的方法
阿新 • • 發佈:2019-01-11
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開始的,沒第一條不可能出來第二條的
另外,按oracle9i參考手冊所言,如果跟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是已經排序好的結果集中的行號,並且用在最上層的限制中.
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開始的,沒第一條不可能出來第二條的
另外,按oracle9i參考手冊所言,如果跟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是已經排序好的結果集中的行號,並且用在最上層的限制中.