天天看點

ORACLE資料庫(五)-----僞列

僞列

      • 一、僞列的定義
      • 二、ROWNUM
        • 1 序号生成時間
        • 2 ROWNUM在WHERE中的使用限制
        • 3 注意點
      • 三、ROWID

一、僞列的定義

可以了解為一種僞裝起來、不容易看到的字段,除非特意查詢,否則不會有所顯現。

與一般字段最明顯的差別:一般字段可以通過SELECT * 查到,檢視某張表的表結構時也能查到,而僞列需要特定的查詢才可以看到,

表結構中也不會有所顯示

二、ROWNUM

ROWNUM是對查詢結果自動生成的一個從1開始的、連續的(自然數)序号,它會随着查詢步驟的進行而不斷發生變化,直到[SELECT]子句執行結束

1 序号生成時間

ROWNUM是從FROM開始生成到SELECT停止變化(在第一篇中有寫到SQL語句執行順序)

SELECT T.*,ROWNUM FROM EMP T WHERE T.DEPTNO = 20;
SELECT T.*,ROWNUM FROM EMP T WHERE T.DEPTNO = 20 ORDER BY SAL DESC;
           
ORACLE資料庫(五)-----僞列
ORACLE資料庫(五)-----僞列

2 ROWNUM在WHERE中的使用限制

ROWNUM < N — N > 1

ROWNUM <= N — N > 0

ROWNUM <> N – N <> 1

ROWNUM = N – N = 1

ROWNUM > N – N < 1

ROWNUM >= N – N <= 1

ROWNUM BETWEEN N1 AND N2 – N1 <= 1 N2 >= 1 / N1 <= 1<= N2

查詢範圍内至少包含第1個才能有資料

查詢員工工資排在第四名到倒數第四名的員工

SELECT *
  FROM (SELECT A.*,ROWNUM RN FROM (SELECT * FROM EMP T ORDER BY SAL DESC) A) B
 WHERE B.RN BETWEEN 4 AND (SELECT COUNT(1)-3 FROM EMP) ;
           

3 注意點

1 僞列前不要加T.

2 不要将ROWNUM用在GROUP BY和HAVING中

三、ROWID

類似于房間号,每一條資料存入到資料庫中時,ORACLE都會為其自動生成一條固定不變的、唯一的18位字元串,用以記錄該條資料在資料庫中的實體位置。
ORACLE資料庫(五)-----僞列
  • ROWID可以精确去除重複資料中的一條
--嘗試删掉多餘資料僅保留一條   重複資料比較少 太多就不适合用這個删除
SELECT T.*,ROWID FROM CLS74 T;
DELETE FROM CLS74 WHERE ROWID <> 'AAASSbAAEAAAAIsAAD' AND SNO = 4;
           

1 在資料庫中,直接查詢目标資料的ROWID,是查詢資料最快、最準确的方法,但一般不用。

2 不允許手動修改ROWID

3 在資料庫中不重複