亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

oracle的rownum深入解析

2024-08-29 13:55:57
字體:
來源:轉載
供稿:網友

本人最近在使用oracle的rownum實現分頁顯示的時候,對rownum做了進一步的分析和研究?,F歸納如下,希望能給大家帶來收獲。

對于rownum來說它是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽字段可以用于限制查詢返回的總行數,而且rownum不能以任何表的名稱作為前綴。
舉例說明:
例如表:student(學生)表,表結構為:

復制代碼 代碼如下:


ID    char(6)      --學號
name    VARCHAR2(10)   --姓名
create table student (ID char(6), name VARCHAR2(100));
insert into sale values('200001',‘張一');
insert into sale values('200002',‘王二');
insert into sale values('200003',‘李三');
insert into sale values('200004',‘趙四');
commit;


(1) rownum 對于等于某值的查詢條件
如果希望找到學生表中第一條學生的信息,可以使用rownum=1作為條件。但是想找到學生表中第二條學生的信息,使用rownum=2結果查不到數據。因為rownum都是從1開始,但是1以上的自然數在rownum做等于判斷是時認為都是false條件,所以無法查到rownum = n(n>1的自然數)。
SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回記錄條數的地方,保證不出錯,如:隱式游標)
SQL> select rownum,id,name from student where rownum=1;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200001 張一
SQL> select rownum,id,name from student where rownum =2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
(2)rownum對于大于某值的查詢條件
如果想找到從第二行記錄以后的記錄,當使用rownum>2是查不出記錄的,原因是由于rownum是一個總是從1開始的偽列,Oracle 認為rownum> n(n>1的自然數)這種條件依舊不成立,所以查不到記錄
SQL> select rownum,id,name from student where rownum >2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
那如何才能找到第二行以后的記錄呀??梢允褂靡韵碌淖硬樵兎椒▉斫鉀Q。注意子查詢中的rownum必須要有別名,否則還是不會查出記錄來,這是因為rownum不是某個表的列,如果不起別名的話,無法知道rownum是子查詢的列還是主查詢的列。
SQL>select * from(select rownum no ,id,name from student) where no>2;
NO ID NAME
---------- ------ ---------------------------------------------------
3 200003 李三
4 200004 趙四
SQL> select * from(select rownum,id,name from student)where rownum>2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
(3)rownum對于小于某值的查詢條件
如果想找到第三條記錄以前的記錄,當使用rownum<3是能得到兩條記錄的。顯然rownum對于rownum<n((n>1的自然數)的條件認為是成立的,所以可以找到記錄。
SQL> select rownum,id,name from student where rownum <3;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200001 張一
2 200002 王二
綜上幾種情況,可能有時候需要查詢rownum在某區間的數據,那怎么辦呀從上可以看出rownum對小于某值的查詢條件是人為true的,rownum對于大于某值的查詢條件直接認為是false的,但是可以間接的讓它轉為認為是true的。那就必須使用子查詢。例如要查詢rownum在第二行到第三行之間的數據,包括第二行和第三行數據,那么我們只能寫以下語句,先讓它返回小于等于三的記錄行,然后在主查詢中判斷新的rownum的別名列大于等于二的記錄行。但是這樣的操作會在大數據集中影響速度。
SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
NO ID NAME
---------- ------ ---------------------------------------------------
2 200002 王二
3 200003 李三
(4)rownum和排序
Oracle中的rownum的是在取數據的時候產生的序號,所以想對指定排序的數據去指定的rowmun行數據就必須注意了。
SQL> select rownum ,id,name from student order by name;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
3 200003 李三
2 200002 王二
1 200001 張一
4 200004 趙四
可以看出,rownum并不是按照name列來生成的序號。系統是按照記錄插入時的順序給記錄排的號,rowid也是順序分配的。為了解決這個問題,必須使用子查詢
SQL> select rownum ,id,name from (select * from student order by name);
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200003 李三
2 200002 王二
3 200001 張一
4 200004 趙四
這樣就成了按name排序,并且用rownum標出正確序號(有小到大)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品无av码在线观看| 亚洲性线免费观看视频成熟| 欧美精品久久久久a| 成人亚洲欧美一区二区三区| 国产精品午夜视频| 在线观看久久久久久| 亚洲欧美另类中文字幕| 97欧美精品一区二区三区| 亚洲最大的成人网| 成人激情视频在线| 黑人狂躁日本妞一区二区三区| 成人欧美一区二区三区黑人| 91九色精品视频| 在线观看欧美日韩国产| 亚洲伊人久久大香线蕉av| 欧洲一区二区视频| 亚洲精品中文字幕有码专区| 亚洲欧美制服第一页| 日韩精品在线免费播放| 成人在线激情视频| 日韩中文在线中文网在线观看| 欧美一区二区三区……| 午夜精品一区二区三区在线视| 久久欧美在线电影| 国产精品电影观看| 欧美激情亚洲综合一区| 国产69精品久久久久久| 北条麻妃一区二区三区中文字幕| 亚洲欧美另类自拍| 26uuu另类亚洲欧美日本老年| 国产在线视频91| 亚洲国产天堂久久综合| 成人亲热视频网站| 在线观看日韩欧美| 影音先锋欧美在线资源| 国产精彩精品视频| 最近2019好看的中文字幕免费| 欧美成人免费网| 91av在线免费观看视频| 国产精品丝袜久久久久久不卡| 欧美激情日韩图片| 日韩极品精品视频免费观看| 91爱视频在线| 国产欧美va欧美va香蕉在线| 久久精品中文字幕电影| 精品国产乱码久久久久久婷婷| 亚洲一区二区福利| 欧美亚洲国产日韩2020| 日韩免费观看在线观看| 欧美在线视频观看| 久久久久久成人精品| 欧美日韩成人免费| 精品一区二区三区四区在线| 国产欧美精品日韩精品| 高清欧美性猛交xxxx| 亚洲v日韩v综合v精品v| 色综合久久精品亚洲国产| 亚洲免费视频在线观看| 精品视频在线导航| 精品中文字幕乱| www国产亚洲精品久久网站| 在线看日韩欧美| 久久色免费在线视频| 欧美一区深夜视频| 7m第一福利500精品视频| 久久中文字幕在线视频| 91av免费观看91av精品在线| 欧美精品videosex极品1| 精品国产乱码久久久久久婷婷| 91精品综合久久久久久五月天| 91影视免费在线观看| 社区色欧美激情 | 国产精品女人久久久久久| 欧美一级电影免费在线观看| 国产精品久久久久久久电影| 另类美女黄大片| 欧美乱大交xxxxx另类电影| 91精品综合久久久久久五月天| 91精品91久久久久久| 日韩欧美中文字幕在线播放| 精品一区精品二区| 国产精品专区第二| 久久精品视频在线观看| 亚洲欧美日韩综合| 欧美激情久久久久| 日韩亚洲精品电影| 亚洲人高潮女人毛茸茸| 青青久久av北条麻妃黑人| 亚洲国产精彩中文乱码av| 成人免费淫片视频软件| 97高清免费视频| 69视频在线播放| 国产日韩精品在线观看| 91色p视频在线| 精品无码久久久久久国产| 欧美黑人性视频| 日韩最新中文字幕电影免费看| 国产主播喷水一区二区| 欧美国产在线电影| 日产日韩在线亚洲欧美| 疯狂蹂躏欧美一区二区精品| 2019中文在线观看| 日韩成人黄色av| 亚洲福利视频网站| 国产精品99导航| 日韩激情在线视频| 国产精品久久久久久久久久尿| 亚洲福利精品在线| 亚洲免费av网址| 亚洲精品国产成人| 亚洲伦理中文字幕| 国产精品欧美亚洲777777| 国产亚洲在线播放| 国产精品日韩欧美| 九九精品在线观看| 久久九九全国免费精品观看| 96精品视频在线| 亚洲黄色www网站| 亚洲深夜福利在线| 7777kkkk成人观看| 日韩国产中文字幕| 高清亚洲成在人网站天堂| 成人黄色片网站| 国产美女主播一区| 91精品国产91久久久久福利| 成人亚洲激情网| 亚洲电影成人av99爱色| 日韩av在线电影网| 色妞欧美日韩在线| 国产精品a久久久久久| 日本19禁啪啪免费观看www| 欧美在线激情视频| 国产区精品在线观看| 国产精品av免费在线观看| 精品久久中文字幕| 国产色综合天天综合网| 日韩的一区二区| 亚洲成人网在线观看| 日韩视频免费中文字幕| 欧美精品videossex88| 日韩av理论片| 亚洲精品98久久久久久中文字幕| 91地址最新发布| 欧美另类极品videosbest最新版本| 91欧美精品午夜性色福利在线| 97精品国产97久久久久久春色| 精品久久久久久亚洲国产300| 久久精品久久久久久| 国产精品激情自拍| 亚洲成人黄色网| 国产ts人妖一区二区三区| 亚洲精品欧美日韩| 日韩av影院在线观看| 国产精品久久久久久久久借妻| 国产一区二区三区在线免费观看| 揄拍成人国产精品视频| 国产成人精品视频在线观看| 国产精品日韩专区| 欧美国产日韩xxxxx| 欧美激情视频在线| 久久99久久久久久久噜噜| 91丝袜美腿美女视频网站| 日韩欧美一区二区在线| 国产偷亚洲偷欧美偷精品|