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;查詢的結果是失敗的。
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
rowid 和 rownum 的區別
rowid 用於定位資料表中某條資料的位置,是唯一的 也不會改變 rownum 表示查詢某條記錄在整個結果集中的位置,同一條記錄查詢條件不同對應的 rownum 是不同的而 rowid 是不會變的 例如有如下一張表 user name age 張三 20 李四 22 王五 23 當執行查詢 sele...
Oracle查詢 rownum和rowid的區別
在oracle中,有乙個很有趣的東西,那就是rownum。當你從某個表中查詢資料的時候,返回的結果集中都會帶有rownum這個字段,而且有時候也可以使用rownum進行一些條件查詢。在查詢中,我們可以注意到,類似於 select xx from table where rownum n n 1 這樣...
oracle中rownum和rowid的區別
rownum和rowid都是偽列,但是兩者的根本是不同的,rownum是根據sql查詢出的結果給每行分配乙個邏輯編號,所以你的sql不同也就會導致最終rownum不同,但是rowid是物理結構上的,在每條記錄insert到資料庫中時,都會有乙個唯一的物理記錄 例如 aaamgzaaeaaaaagaa...