
文章插圖
對(duì)于rownum來說它是oracle系統(tǒng)順序分配為從查詢返回的行的編號(hào),返回的第一行分配的是1,第二行是2,依此類推,這個(gè)偽字段可以用于限制查詢返回的總行數(shù),且rownum不能以任何表的名稱作為前綴 。
(1) rownum 對(duì)于等于某值的查詢條件
如果希望找到學(xué)生表中第一條學(xué)生的信息,可以使用rownum=1作為條件 。但是想找到學(xué)生表中第二條學(xué)生的信息,使用rownum=2結(jié)果查不到數(shù)據(jù) 。因?yàn)閞ownum都是從1開始,但是1以上的自然數(shù)在rownum做等于判斷是時(shí)認(rèn)為都是false條件,所以無法查到rownum = n(n>1的自然數(shù)) 。
SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回記錄條數(shù)的地方,保證不出錯(cuò),如:隱式游標(biāo))
SQL> select rownum,id,name from student where rownum =2;
ROWNUM ID NAME
———- —— —————————————————
(2)rownum對(duì)于大于某值的查詢條件
如果想找到從第二行記錄以后的記錄,當(dāng)使用rownum>2是查不出記錄的,原因是由于rownum是一個(gè)總是從1開始的偽列,Oracle 認(rèn)為rownum> n(n>1的自然數(shù))這種條件依舊不成立,所以查不到記錄 。
查找到第二行以后的記錄可使用以下的子查詢方法來解決 。注意子查詢中的rownum必須要有別名,否則還是不會(huì)查出記錄來,這是因?yàn)閞ownum不是某個(gè)表的列,如果不起別名的話,無法知道rownum是子查詢的列還是主查詢的列 。
SQL>select * from(select rownum no ,id,name from student) where no>2;
NO ID NAME
———- —— —————————————————
3 200003 李三
4 200004 趙四
(3)rownum對(duì)于小于某值的查詢條件
rownum對(duì)于rownum<n((n>1的自然數(shù))的條件認(rèn)為是成立的,所以可以找到記錄 。
SQL> select rownum,id,name from student where rownum <3;
ROWNUM ID NAME
———- —— —————————————————
1 200001 張一
2 200002 王二
查詢r(jià)ownum在某區(qū)間的數(shù)據(jù),必須使用子查詢 。例如要查詢r(jià)ownum在第二行到第三行之間的數(shù)據(jù),包括第二行和第三行數(shù)據(jù),那么我們只能寫以下語句,先讓它返回小于等于三的記錄行,然后在主查詢中判斷新的rownum的別名列大于等于二的記錄行 。但是這樣的操作會(huì)在大數(shù)據(jù)集中影響速度 。
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的是在取數(shù)據(jù)的時(shí)候產(chǎn)生的序號(hào),所以想對(duì)指定排序的數(shù)據(jù)去指定的rowmun行數(shù)據(jù)就必須注意了 。
SQL> select rownum ,id,name from student order by name;
ROWNUM ID NAME
———- —— —————————————————
3 200003 李三
2 200002 王二
1 200001 張一
4 200004 趙四
可以看出,rownum并不是按照name列來生成的序號(hào) 。系統(tǒng)是按照記錄插入時(shí)的順序給記錄排的號(hào),rowid也是順序分配的 。為了解決這個(gè)問題,必須使用子查詢;
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標(biāo)出正確序號(hào)(有小到大)
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 華東政法考研成績查詢
- ip地址精確位置查詢 ip地址追蹤具體位置
- oracle數(shù)據(jù)庫基礎(chǔ)知識(shí) oracle數(shù)據(jù)庫免費(fèi)嗎
- mysql查詢出所有重復(fù)的記錄 mysql找出重復(fù)數(shù)據(jù)
- 教你如何詳細(xì)查詢快遞 怎樣用快遞單號(hào)查物流信息
- 中國農(nóng)大考研成績查詢
- 霧水桃花查詢表
- sql查詢?nèi)掌跁r(shí)間范圍的方法 sql查詢?nèi)掌跁r(shí)間范圍
- 谷歌經(jīng)緯度查詢位置 谷歌經(jīng)緯度查詢是什么軟件
- 天喜紅鸞桃花查詢表
