Rownum 和 Rowid是Oracle數據庫所特有的,通過他們可以查詢到指定行數范圍內的數據記錄。
以下通過例子講解:
-- 為了方便,首先,查找dept表中的所有。
select deptno,dname,loc from scott.dept;

-- Rownum
-- 可以查詢 rownum(行數) 為 1 的數據
select rownum,deptno,dname,loc
from scott.dept
where rownum = 1;

-- 如果直接查詢 rownum 為 2 的數據,返回是 null
-- 因為 rownum 是臨時產生的一個“偽列”
-- 是先獲取到全部的數據之后,才決定如何分配 rownum
-- 需要先搞定 1,才能知道下一個是 2,即需要從1開始查起。
-- 查詢最前面兩條的記錄
select rownum,deptno,dname,loc
from scott.dept
where rownum < 3;
-- 會從1開始查起,查到后接着查詢2...直到不符合條件。

-- 下面查詢結果為 null,因為1沒有查,接下來的無從查起。
select rownum,deptno,dname,loc
from scott.dept
where rownum > 3;
-- 從1開始查起,直到全部。
select rownum,deptno,dname,loc
from scott.dept
where rownum > 0;
-- Rowid是一串隨機生成的字符串,也是 Oracle 提供的一個數列。
-- Rownum 和 Romid 區別
-- 一般情況下,每一行數據對應一個 rowid,這個值是固定而且唯一的。
-- 在這行數據存入數據庫的時候,就確定的了,自動生成的。
-- 相當於我們 Java 對象在堆內存中對應有一個固定的地址值。
-- 可以使用 rowid 來查詢記錄,通過它可以提高我們的查詢速度
-- 因為會有一張表單獨保存 rowid,如果在查詢的時候,
-- 需要掃描的列越少,速度就會越快,也是 oracle 查詢最快的方式之一
-- rowid 在你的表發生移動時候,也會跟着一起發生改變。
-- 最大的一個作用:因為是唯一的,可以用來避免重復數據。
select rowid, deptno, dname, loc
from scott.dept
where rowid = 'AAAR3qAAEAAAACHAAC';
