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 偽列的意義就不應該感到驚奇,同樣是...