視圖
資料庫物件—視圖:
一、視圖的定義:從表中抽出的邏輯上相關的資料集合
a) 視圖是一種虛表
b) 視圖建立在已有表基礎上,視圖依賴已建立的這些表稱為基表
c) 向視圖提供資料內容的語句為SELECT語句,可以將視圖理解為儲存起來的SElECT語句
d) 視圖向使用者提供基表資料的另一種表示形式
二、為什麼要使用視圖
a) 控制資料訪問:提供了一種安全機制,通過視圖顯示資料時,屏蔽使用者不應該知道的資料.
b) 簡化查詢:select語句構造了一個複雜的查詢語句,每次使用必須都得調用它
c) 避免重複訪問相同的資料
三、建立視圖:
a) 在CREATE VIEW語句中嵌入子查詢
i. Create [OR REPLACE] [FORCE | NOFORCE] VIEW view [(alias [,alias]…)]
AS subquerytion
[with check option [CONSTRAINT constraint ]]
[with read only [CONSTRAINT constraint]]
b) 子查詢可以是複雜的SELECT語句
i. CREATE VIEW empvu
AS select employee_id,last_name,salary
FROM employees
WHERE department_ed=80;
c) 描述視圖結構:
i. Describe empvu;
d) 建立視圖時在子查詢中給列定義別名
i. SQL> create view usersview as select username name,password pass from users;
ii. //查詢檢視
SQL> select * from usersview;
e) 使用CREATE OR REPLACE VIEW 子句修改視圖
i. SQL> create or replace view usersview as(select * from users);
f) 建立帶有函數,groupby子句視圖
i. SQL> create or replace view gde as ( select deptno,count(*) cou from emp group by deptno);
g) 建立串連視圖 帶有函數 group by子句 order by 子句
i. SQL> create view gdeo as select e.deptno,count(*) cou from emp e inner join dept d on e.deptno=d.deptno group by e.deptno order by e.deptno;
四、 視圖中使用DML的規定
a) 可以在簡單視圖中執行DML操作
b) 當時圖定義中包含以下元素之一是不能使用delete:
i. 組函數
ii. GROUP BY 子句
iii. DISTINCT 關鍵字
iv. ROWNUM 偽列
c) 當視圖定義中包含以下元素之一時不能使用update :
i. 組函數
ii. GROUP BY子句
iii. DISTINCT 關鍵字
iv. ROWNUM 偽列
v. 列的定義為運算式
d) 可以使用 WITH READ ONLY 選項屏蔽對視圖的DML 操作
d)任何 DML 操作都會返回一個Oracle server 錯誤
五、 刪除視圖
a) Drop view 視圖名;