Oracle中rownum的使用

2021-07-27 06:32:44 字數 1077 閱讀 6431

首先,我們需要了解一下rownum的定義:

rownum

是對結果集的編序排列,始終是從1開始。

實際上rownum並不是乙個實際存在的列,所以我們平時對列進行的操作無法完全套用到上面。

注意:rownum的查詢只能從1開始!

在做乙個專案時遇到了rownum的問題。當時是需要獲取一張表中的資料,支援排序和分頁。

舉個例子:有一張student表,其中有studentnum(學生編號)、studentname(學生姓名)、***(學生性別)、age(學生年齡)。

需求:獲取表中20歲以下的學生的資訊並且以年齡進行排序(從小到大),每頁只展示10條資料。

語句如下:select * from (select rownum rn,a.* from (select * from student where age <=20 order by age) a ) b where rn between 1 and 10

現在我們來分析下這條sql語句:

首先,a表,即(select * from 

student where age <=20 order by 

age)  這條語句查出的內容為年齡為20歲以下的資訊。這時我們其實已經取出需要的資料集合了,但是我們需要對其進行分頁獲取。就需要用到rownum。

然後,b表,因為a表內的rownum其實是student表的預設排序列,所以我們不能在表a中直接使用rownum。而我們需要的是a表資料結果的rownum,所以我們用表b來進行包裹表a,此時表b的rownum才是我們所要用的。

最後,為什麼我們需要在表b中將rownum查詢出來並作為新的列來進行操作。這是因為rownum的查詢只能從1開始,如果我們使用where rownum between 11 and 20,這樣的話,我們什麼也查詢不出來。

如果感覺有點理解不了,可以試下下面這條語句:

select rownum rn2,a.* from (select rownum rn1,s.* from 

student s where age <=20 order by age) a

可以看下rn1和rn2是否一致,關於rownum只能從1開始查詢也可以試一試。

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