Oracle中rowid與rownum的區別

2021-06-22 07:15:14 字數 1034 閱讀 6472

oracle中rowid和rownum都是偽列,但含義完全不同。rowid是實體地址,用於定位oracle中具體資料的儲存位置,而rownum則是sql語句的輸出結果排序。通俗的講:rowid是相對不變的,rownum會變化,尤其是使用order by的時候。

需要注意的是rownum的用法:

select *  from  emp   where rownum//有意義的查詢

select *  from  emp   where rownum=n   //只有在n=1的時候該語句是有意義的

select *  from  emp   where rownum>n  //該語句沒有意義,當n=0的時候返回所有值,當n!=0的時候返回空集

原因在於oracle對rownum的處理上,rownum是在查詢語句得到結果集的時候產生的,用於標記結果集順序的乙個字段,這個欄位被稱為『偽數列』,也就是事實上並不存在的乙個數列。它的特點是按順序標記,而且是逐次遞加的,換句話說就是只有rownum=1的記錄,才會出現rownum=2的記錄。

我們可以看出使用rownum是有使用限制的,但是我們常常可以遇到這樣的需求『查詢第xx條到第xx條的記錄』,比如頁面的分頁處理,當遇到這類需求的時候我們如何構造出我們所需要的結果集呢?

我們需要利用子查詢,在構造臨時表的時候把rowid構造成乙個實際的字段

select  t1.*,t1.rn  from(

select t.*,rownum  rn    from  (

select *  from  emp

)   t

)   t1    where t1.rn>3   and t1.rn<6

oracle中,rownum與rowid的區別

oracle中,rownum與rowid的區別 1.rownum rownum是乙個偽數列 即實際並不存在的數列 按順序標記,且遞增,只有有了rownum 1的記錄,才會有rownum 2的 記錄。示例 1.select from eap dept d where rownum 1 可查詢出一條資料...

oracle中 rownum與rowid的理

一 oracle分頁查詢 我們先看學習一下oracle 分頁查詢的語法示例,然後在具體學習用 rownum 的原理。從第 1條開始,每次選 n個,從第 1 m個開始每次選n個 select t2.from select rid from select r.rid,rownum linenum fro...

Oracle資料庫中rowid與rownum的區別

在查詢中,我們可以注意到,類似於 select xx from table where rownum n n 1 這樣的查詢是有正確含義的,而 select xx from table where rownum n 這樣的查詢只在n 1的時候成立,select xx from table where...