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