僞列
-
-
- 一、僞列的定義
- 二、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;
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位字元串,用以記錄該條資料在資料庫中的實體位置。
- ROWID可以精确去除重複資料中的一條
--嘗試删掉多餘資料僅保留一條 重複資料比較少 太多就不适合用這個删除
SELECT T.*,ROWID FROM CLS74 T;
DELETE FROM CLS74 WHERE ROWID <> 'AAASSbAAEAAAAIsAAD' AND SNO = 4;
1 在資料庫中,直接查詢目标資料的ROWID,是查詢資料最快、最準确的方法,但一般不用。
2 不允許手動修改ROWID
3 在資料庫中不重複