oracle偽列ROWNUM的學習

2021-12-30 00:33:58 字數 2572 閱讀 3195

oracle偽列rownum的學習

1. rownum是按照記錄插入時的順序排序的

2. rownum並不實際存在,是對篩選後的結果集的乙個排序,如果不存在結果集就不會有rownum

3. rownum不能用基表名作為字首

4. 在使用rownum進行查詢時

4.1若使用大於號(>),則只能使用(>0),其他均不可以,用剛才的表做說明。

(a)查詢rownum>0的資料

和預期一樣,顯示了所有的記錄

(b)查詢rownum>1的資料

為什麼不顯示rownum=(2,3,4)的記錄

說明:當select篩選出所要的結果集後,取出第一條rownum=1,不符合rownum>1,所以剔除,選取下面一條資料,rownum仍然是1,還是不符合要求。以此類推,沒有rownum=1就沒有rownum=2,所以就不會篩選出rownum>1的結果集。

(c)但是利用子查詢就可以實現原來的想法

select * from (select rownum as rn,xh,***,birthday,classid,degree from stud)

where rn>1

注意:此處需要使用別名

4.2若使用小於號(

4.3若使用等於號(=),則只能使用等於1(=1),原因同4.1

5. 對於rownum排序的實驗說明

(a)執行四條插入語句,sql如下:

insert into stud values('a001','jack','男','','10','');

insert into stud values('a002','tom','男','','30','');

insert into stud values('a003','jhon','女','','20','');

insert into stud values('a004','martin','男','','20','');

commit;

(b)再進行檢視,sql如下:

select rownum,xh,***,birthday,classid,degree from stud;

結果如下:

(c)檢視後三條記錄,sql如下:

select rownum,xh,***,birthday,classid,degree from stud

where xh in ('a002','a003','a004');

結果如下:

rownum是按照插入順序得來的,但是上面第二次查詢rownum為什麼不是2、3、4,或許有人會有這個疑問。由於rownum並不是物理存在的,它是乙個邏輯的順序。當查詢時,按條件得到』a002』、』a003』、』a004』三條記錄,oracle對查詢得到的三條記錄按照插入時的次序進行排序分別為1、2、3。

6.利用rownum取出第2-3行資料,有兩種方法:

方法一:先取出前3條記錄,再取出第一條資料,用minus做差集就得到了需要的結果集

sql如下:

select rownum,xh,xm,***,classid from stud

where rownum <=3

minus

select rownum,xh,xm,***,classid from stud

where rownum =1;

結果如下:

方法二:不利用minus也可以,利用子查詢

sql如下:

select * from (select rownum as rn,xh,xm,***,classid from stud where rownum<=3)

where rn>1;

結果如下:

總結:方法二使用時,子查詢rownum需要使用別名。在資料量較大的情況下,方法二效率較高。

作者「to_be_monster_of_it」

Oracle的資料偽列 ROWNUM

資料庫 oracle11g 資料偽列 rownum 範例 查詢前5條記錄 select rownum,empno,job,hiredate,sal from emp where rownum 5 範例 查詢 6 10 條記錄 按照正常的思維肯定直接進行between and的判斷 如 select ...

oracle中的偽列rownum

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

Oracle的資料偽列 ROWNUM

資料庫 oracle11g 資料偽列 rownum 範例 查詢前5條記錄 select rownum,empno,job,hiredate,sal from emp where rownum 5 範例 查詢 6 10 條記錄 按照正常的思維肯定直接進行between and的判斷 如 select ...