Oracle中有五種數據庫對象:表、視圖、序列、索引和同義詞。
視圖是基於壹個表或多個表或視圖的邏輯表,不包含數據。它可以用來查詢和修改表中的數據。視圖所基於的表稱為基表。
視圖是存儲在數據字典中的select語句。可以通過創建視圖來提取數據的邏輯集合或組合。
視圖的優點:
1.訪問數據庫,因為視圖可以有選擇地選擇數據庫的壹部分。
2.用戶可以通過簡單的查詢從復雜的查詢中得到結果。
3.保持數據的獨立性,盡量從多個表中檢索數據。
4.可以為相同的數據生成不同的視圖。
視圖分為簡單視圖和復雜視圖:
簡單視圖只從單個表中獲取數據。
來自多個表的復雜視圖
簡單視圖不包含函數和數據組。
復雜視圖包含
簡單視圖可以實現DML操作
不允許復雜視圖。
視圖的創建:
創建[或替換] [FORCE|NOFORCE]視圖視圖名稱
[(別名[,別名]...)]
作為子查詢
[帶檢查選項[約束約束]]
[只讀]
其中包括:
或替換:如果創建的嘗試已經存在,ORACLE將自動重建視圖;
強制:無論ORACLE是否存在於基表中,都將自動創建該視圖;
NOFORCE:僅當基表存在時,ORACLE才會創建此視圖:
別名:為視圖生成的列定義的別名;
子查詢:壹個完整的SELECT語句,其中可以定義別名;
帶檢查選項:
插入或修改的數據行必須滿足視圖定義的約束;
對於只讀:
不能在此視圖上執行任何DML操作。
例如:
創建或替換視圖部門_總和_大眾
(姓名,明薩爾,馬克斯薩爾,阿夫格薩爾)
AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
來自員工e部d
其中e.deptno=d.deptno
按d.dname分組;
視圖的定義原則:
1.視圖的查詢可以使用復雜的SELECT語法,包括連接/組查詢和子查詢;
2.如果沒有WITH CHECK選項和只讀,則不能在查詢中使用它。
ORDER BY子句;
3.如果檢查選項約束沒有命名,系統會自動以SYS_Cn的形式命名;
4.或者REPLACE選項可以更改定義並重建原始視圖而不刪除它,或者再次授予對象。
許可。
視圖查詢:
成功創建視圖後,您可以從視圖中檢索數據,就像從表中檢索數據壹樣。
還可以查詢視圖的所有信息以及指定的數據行和列。
比如:
檢索數據:
SQL & gtSELECT * FROM dept _ sum _ vw
查詢視圖定義:
SELECT視圖名稱,用戶視圖中的文本。
其中文本顯示的內容是視圖定義的SELECT語句,可以通過DESC USER_VIEWS訪問。
獲取相關信息。
修改視圖:
通過或替換以相同的名稱重新創建視圖。
視圖上的DML操作:
DML運行中應遵循的原則:
1.簡單視圖可以執行DML操作;
2.當視圖包含GROUP function、GROUP BY子句和DISTINCT關鍵字時,則不會。
刪除數據行;
3.當視圖中沒有出現下列情況時,可以通過視圖修改基表數據或插入數據:
A.視圖包含GROUP function、GROUP BY子句和DISTINCT關鍵字;
B.由表達式定義的列;
C.ROWNUM偽列
d未在視圖中選擇的基表中的其他列被定義為非空的,沒有默認值。
視圖可以用來維護數據庫的完整性,但是它們的功能是有限的。
通過視圖實施引用完整性約束可以在數據庫級別實施約束。
WITH CHECK OPTION子句限定:
通過視圖執行的插入和更新不能創建視圖無法檢索的數據行。
因為它對插入或修改的數據行執行完整性約束和數據有效性檢查。
例如:
創建或替換視圖vw_emp20
AS SELECT * FROM emp
其中deptno=20
帶檢查選項約束vw _ emp20 _ ck
視圖已創建。
查詢結果:
從vw_emp20中選擇empno,ename,job
EMPNO ENAME作業
- - -
史密斯職員7369號
7566瓊斯經理
7902福特分析師
修改:
更新vw_emp20
設置deptno=20
其中empno = 7902
將會生成壹個錯誤:
更新vw_emp20
*
錯誤在第壹行:
ORA-01402:帶有檢查選項的視圖違反了WHERE子句。
刪除視圖:
DROP VIEW VIEW_NAME語句刪除視圖。
刪除視圖的定義不會影響基表中的數據。
只有視圖的所有者和有權刪除視圖視圖的用戶才能刪除視圖。
刪除視圖後,基於已刪除視圖的其他視圖或應用程序將無效。