視圖(view)實際上是一張或者多張表上的預定義查詢,這些表稱為基表。從視圖中
查詢資訊與從表中查詢資訊的方法完全相同。隻需要簡單的
select…from 即可。
視圖具有以下優點:
1.
可以限制使用者隻能通過視圖檢索資料。這樣就可以對最終使用者屏蔽建表時底層的基
表。
2.
可以将複雜的查詢儲存為視圖。可以對最終使用者屏蔽一定的複雜性。
3.
限制某個視圖隻能通路基表中的部分列或者部分行的特定資料。這樣可以實作一定
的安全性。
4.
從多張基表中按一定的業務邏輯抽出使用者關心的部分,形成一張虛拟表。
文法結構:建立視圖
create [or replace]
[{force|noforce}] view view_name
as
select查詢
[with read only
constraint]
文法解析:
1. or replace:如果視圖已經存在,則替換舊視圖。
force:即使基表不存在,也可以建立該視圖,但是該視圖不能正常使用,當基表
建立成功後,視圖才能正常使用。
noforce:如果基表不存在,無法建立視圖,該項是預設選項。
4. with read
only:預設可以通過視圖對基表執行增删改操作,但是有很多在基表上
的限制(比如:基表中某列不能為空,但是該列沒有出現在視圖中,則不能通過視
圖執行
insert 操作),with read only
說明視圖是隻讀視圖,不能通過該視圖進行
增删改操作。現實開發中,基本上不通過視圖對表中的資料進行增删改操作。
案例 3:基于 emp 表和 dept
表建立視圖
代碼示範:視圖
sql> create or replace view empdetail
2 as
select empno,ename,job,hiredate,emp.deptno,dname
4 from emp join dept on
emp.deptno=dept.deptno
5 with read only
6 /
view created
sql> select * from empdetail; ①
empno ename job hiredate
deptno dname
7369 smith clerk 17-12 月-80 20 research
7499 allen salesman 20-2 月 -81 30 sales
7521 ward
salesman 22-2 月 -81 30 sales
7566 jones manager 02-4 月
-81 20 research
7654 martin salesman 28-9 月 -81 30
sales
7698 blake manager 01-5 月 -81 30 sales
7782
clark manager 09-6 月 -81 10 accounting
7788 scott analyst
19-4 月 -87 20 research
7839 king president 17-11 月-81
10 accounting
7844 turner salesman 08-9 月 -81 30 sales
7876 adams clerk 23-5 月 -87 20 research
7900 james
clerk 03-12 月-81 30 sales
7902 ford analyst 03-12 月-81
20 research
7934 miller clerk 23-1 月 -82 10 accounting
14 rows selected
代碼解析:
①
對視圖可以像表一樣進行查詢。該視圖中隐藏了員工的工資。
删除視圖可以使用“drop view 視圖名稱”,删除視圖不會影響基表的資料