rowid和rownum的區別
rowid和rownum都是序列,但含義完全不同。rowid是實體地址,用於定位oracle中具體資料的物理儲存位置,rownum則是sql的輸出結果排序。通俗的講:rowid是相對不變的,rownum會變化,尤其是使用order by的時候
rowid:用於定位資料表中某條資料的位置,是唯一的,也不會改變
rownum表示查詢某條記錄在整個結果集中的位置,同一條記錄查詢條件不同對應的rownum是不同的而rowid是不會變的
rowid:
SQL> select * from cheng1;
NAME ID
----- ----------
eeee 28
nnnn 1
cccc 1
aaaa 30
SQL> select rowid,name,id from cheng1;
ROWID NAME ID
------------------ ----- ----------
AAAXmlAABAAAO5iAAA eeee 28
AAAXmlAABAAAO5iAAD nnnn 1
AAAXmlAABAAAO5iAAE cccc 1
AAAXmlAABAAAO5iAAF aaaa 30
SQL> select name,id from cheng1 where rowid='AAAXmlAABAAAO5iAAE';
NAME ID
----- ----------
cccc 1
SQL> select name,id from cheng1 where rowid='AAAXmlAABAAAO5iAAA';
NAME ID
----- ----------
eeee 28
rownum:在oracle中,要按特定條件查詢前n條記錄,用rownum就可以了。select * from cheng1 where rownum<3;這裡要注意的是不能對rownum用''>'',也就是說如果
用select * from cheng1 where rownum>3;查詢的結果是失敗的。
rowid:用於定位資料表中某條資料的位置,是唯一的,也不會改變
rownum表示查詢某條記錄在整個結果集中的位置,同一條記錄查詢條件不同對應的rownum是不同的而rowid是不會變的
rowid:
SQL> select * from cheng1;
NAME ID
----- ----------
eeee 28
nnnn 1
cccc 1
aaaa 30
SQL> select rowid,name,id from cheng1;
ROWID NAME ID
------------------ ----- ----------
AAAXmlAABAAAO5iAAA eeee 28
AAAXmlAABAAAO5iAAD nnnn 1
AAAXmlAABAAAO5iAAE cccc 1
AAAXmlAABAAAO5iAAF aaaa 30
SQL> select name,id from cheng1 where rowid='AAAXmlAABAAAO5iAAE';
NAME ID
----- ----------
cccc 1
SQL> select name,id from cheng1 where rowid='AAAXmlAABAAAO5iAAA';
NAME ID
----- ----------
eeee 28
rownum:在oracle中,要按特定條件查詢前n條記錄,用rownum就可以了。select * from cheng1 where rownum<3;這裡要注意的是不能對rownum用''>'',也就是說如果
用select * from cheng1 where rownum>3;查詢的結果是失敗的。
SQL> select rownum,name,id from cheng1;
ROWNUM NAME ID
---------- ----- ----------
1 eeee 28
2 ffff 1
3 aaaa 30
SQL> select * from cheng1 where rownum<3;
NAME ID
----- ----------
eeee 28
ffff 1
SQL> select * from cheng1 where rownum>2;
no rows selected
對應rownum來說它是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,以此內推,這個偽欄位可以用於限制查詢返回的總行數,
因為rownum都是從1開始,但是1以上的自然數在rownum做判斷時認為都是false條件,所有無法查到rownum=n(n>1的自然數)。
rownum對應大於某值的查詢條件,如果想找從第二行記錄以後的記錄,當使用rownum>2是查不出記錄的,原因是由於rownum是一個總是從1開始的偽劣,oracle認為
rownum>n(n>1的自然數)這種條件不成立,所以查不到SQL> select * from cheng1 where rownum>2;
那如何才能找到第二行以後的記錄。可以使用以下的子查詢方法來決解。注意子查詢中的rownum必須有別名,否則還是不會查出記錄來,這是因為rownum不是某個
表的列,如果不起別名的話,無法知道rownum是子查詢還是主查詢的列。
SQL> select * from (select rownum no,name,id from cheng1) where no>2;
NO NAME ID
---------- ----- ----------
3 aaaa 30
rownum對於小於某值的查詢條件如果想找到第三條記錄以前的記錄,當使用rownum<3是能得到2條記錄的。顯然rownum對於rownum1的自然數)的條件認為是成
立的所有可以找到記錄。綜上幾種情況,可能有時候需要查詢rownum在某區間的資料,哪怎麼辦,從上可以看出rownum對小於謀值的查詢條件是人為true的,rownum
對大於某值的查詢條件直接認為是false的,但是可以間接的讓它轉為認為是true的。那就必須使用
子查詢。
列於查詢第1條到第3條中間的記錄:
SQL> select * from (select rownum nn,name,id from cheng1 where rownum<3) where nn>1;
NN NAME ID
---------- ----- ----------
2 ffff 1
ROWNUM NAME ID
---------- ----- ----------
1 eeee 28
2 ffff 1
3 aaaa 30
SQL> select * from cheng1 where rownum<3;
NAME ID
----- ----------
eeee 28
ffff 1
SQL> select * from cheng1 where rownum>2;
no rows selected
對應rownum來說它是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,以此內推,這個偽欄位可以用於限制查詢返回的總行數,
因為rownum都是從1開始,但是1以上的自然數在rownum做判斷時認為都是false條件,所有無法查到rownum=n(n>1的自然數)。
rownum對應大於某值的查詢條件,如果想找從第二行記錄以後的記錄,當使用rownum>2是查不出記錄的,原因是由於rownum是一個總是從1開始的偽劣,oracle認為
rownum>n(n>1的自然數)這種條件不成立,所以查不到SQL> select * from cheng1 where rownum>2;
那如何才能找到第二行以後的記錄。可以使用以下的子查詢方法來決解。注意子查詢中的rownum必須有別名,否則還是不會查出記錄來,這是因為rownum不是某個
表的列,如果不起別名的話,無法知道rownum是子查詢還是主查詢的列。
SQL> select * from (select rownum no,name,id from cheng1) where no>2;
NO NAME ID
---------- ----- ----------
3 aaaa 30
rownum對於小於某值的查詢條件如果想找到第三條記錄以前的記錄,當使用rownum<3是能得到2條記錄的。顯然rownum對於rownum1的自然數)的條件認為是成
立的所有可以找到記錄。綜上幾種情況,可能有時候需要查詢rownum在某區間的資料,哪怎麼辦,從上可以看出rownum對小於謀值的查詢條件是人為true的,rownum
對大於某值的查詢條件直接認為是false的,但是可以間接的讓它轉為認為是true的。那就必須使用
子查詢。
列於查詢第1條到第3條中間的記錄:
SQL> select * from (select rownum nn,name,id from cheng1 where rownum<3) where nn>1;
NN NAME ID
---------- ----- ----------
2 ffff 1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2057327/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中rownum和rowid的區別Oracle
- 【oracle rowid與rownum的使用與區別 】Oracle
- rownum和rowid,row_number一點應用
- 淺析Oracle(rownum)和Mysql(limit)分頁的區別OracleMySqlMIT
- ROWID與ROWNUM的簡介與對比
- Oracle中rownum與rowid使用上的問題Oracle
- sql tuning—分析10與11g在處理rownum及rowid的效能區別—part1SQL
- 唯一索引和非唯一索引ROWID儲存的區別索引
- http://www.hzoes.com/ rowid與rownum不一樣HTTP
- 唯一index和非唯一index中leaf node裡rowid的一點區別。Index
- Oracle的rownum原理和使用Oracle
- ../和./和/的區別
- 和 的區別
- as 和 with的區別
- ||和??的區別
- /*和/**的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery
- T和?的區別
- ++a和a++的區別
- makefile =和:=的區別
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- oracle的rownumOracle
- oracle中的Rowid和UrowidOracle
- 和區別
- Oracle中rownum和row_number()Oracle
- MYSQL和SQL的區別MySql
- varchar和char的區別
- &self 和 self 的區別
- var和public的區別
- filter和interceptor的區別Filter
- useEffect 和 useLayoutEffect 的區別
- SDK和API的區別?API
- var 和 let 的區別
- WebApi和MVC的區別WebAPIMVC