視圖
數據庫對象—視圖:
一、視圖的定義:從表中抽出的邏輯上相關的數據集合
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 視圖名;