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 ...