rowid和rownum的區別

2021-09-22 19:25:03 字數 2697 閱讀 3063

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