Oracle中rownum的說明及提示

來源:互聯網
上載者:User

標籤:insert   使用   select   row   預設   from   ima   關鍵字   png   

oracle中常用到ROWNUM,所以做一些本人對rownum的一些認識和提示的記錄,以便備查。

一、rownum的說明

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

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

select rownum as rn, t.* from emp t;

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

select rownum as t2_rn, t2.* from (select rownum as t1_rn , t1.* from emp t1 order by t1.sal) t2;

由可以看到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的說明及提示

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.