1、為什麼使用視圖
(1)限制資料的存取:使用者只能看到基表的部分資訊。
(2)使得複雜的 查詢變得容易:視圖中的資料可能來自多個表。
(3)使得資料相對比較獨立:從項目開發的角度, 模組對應視圖,模組包含多個表,模組發生變化後只需修改相應的視圖,對應的表的結構無需修改。
(4)代表對同一資料的不同視角:不同部門的員工只能看到本部門的資訊。
2、建立視圖
CREATE VIEW empvu10
AS SELECT empno, ename, job
FROM emp1
WHERE deptno=30
/ (定義視圖的查詢中不能使用ORDER BY子句)
3、查詢檢視
視圖定義的SELECT語句儲存在LONG型的TEXT欄位中。
使用SET LONG 150增加LONG 型最大顯示寬度,預設為80
select * from user_views
/
文法說明
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY];
OR REPLACE 如果視圖已存在,相當於修改視圖
FORCE | [NOFORCE] 無論 基表是否存在都建立視圖 [只有基表存在能建立]
WITH CHECK OPTION 通過視圖執行 的INSERT和UPDATE操作不能建立該視圖檢索不到的資料行
WITH READ ONLY 禁 止對視圖執行DML操作
4、建立複雜的視圖
//不能通過修改視圖修改基表的資料
CREATE VIEW dept_sum_vu
(dname,minsal,maxsal,avgsal)
AS SELECT d.dname,MIN(e.sal),
MAX(sal),AVG(sal)
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname
/
資料來自多個表,查詢中使用 了分組函數