Oracle中rownum的說明及使用技巧

2021-10-06 09:30:07 字數 1717 閱讀 6902

rownum是oracle特有的乙個關鍵字。

(1)對於基表,在insert記錄時,oracle就按照insert的順序,將rownum分配給每一行記錄,因此在select乙個基表的時候,rownum的排序是根據insert記錄的順序顯示的,例如:

(2)對於子查詢,則rownum的順序是根據子查詢的查詢順序進行動態分配的,例如:

由上圖可以看到t1_rn和t2_rn的區別。

t1中的rownum是根據emp這個基表的預設順序分配的,而內層子迴圈是根據sal欄位進行排序,所以t2的rownum是根據內層子查詢的記錄順序分配的。

----------------------------- 分 割 線 -------------------------------------

二、rownum的一些使用技巧

(1)使用rownum限制查詢返回的記錄數

1、例如,我們現在只想看到emp表中的第一條記錄:

select * from emp where rownum=1;
將rownum限制為1,這樣就只能查詢出一條記錄。

2、現在,我們現在想檢視emp中的前2條記錄:

select * from emp where rownum<=2;
將rownum的限制為2條,這樣就可以查詢出前2條記錄。

3、假如我們現在只想檢視emp中的第二條記錄,又該如何寫語句呢?

如果我們先這樣寫:

select * from emp where rownum=2;
where條件為:rownum=2,來看看查詢結果:

發現沒有查出任何資料,為什麼呢?這裡就要對oracle的rownum做進一步的理解。

因為rownum並不是當作實體資料存放在每一張表中,而是在每一次select查詢的時候,根據基表的預設insert順序由oracle動態分配的,有1才有2,如果rownum沒有1,那麼2也就沒有了意義,所以這個查詢就不會有任何結果出來。這個時候我們就需要利用子查詢和別名列來實現這個需求:

select * 

from

( select rownum as rn, t.* from emp t where rownum<=2 )

where rn=2 ;

首先通過子查詢,取出emp表的前2條記錄,並將子查詢中的rownum定義為別名rn,然後在外層查詢中,使用where條件使rn=2即可,查詢出emp表的第二條記錄:

Oracle中rownum的用法

1 查詢第幾行的記錄 select sal from emp where rownum 1 查詢得到第一行記錄 select sal from emp where rownum 5 不可以查詢到第五行記錄,因為 rownum 總是從1 開始查詢的,故這種方式不可以直接得到第幾行的記錄。若想得到第五行...

Oracle中rownum的用法

1 查詢第幾行的記錄 select sal from emp where rownum 1 查詢得到第一行記錄 select sal from emp where rownum 5 不可以查詢到第五行記錄,因為rownum 總是從1開始查詢的,故這種方式不可以直接得到第幾行的記錄。若想得到第五行記錄...

oracle中rownum的用法

對於 oracle 的 rownum 問題,很多資料都說不支援 between.and,只能用以上符號 並非說用 gt between.and 時會提示sql語法錯誤,而是經常是查不出一條記錄來,還會出現似乎是莫名其妙的結果來,其實您只要理解好了這個 rownum 偽列的意義就不應該感到驚奇,同樣是...