Oracle(創建視圖)


概念:

視圖:所謂視圖就是提取一張或者多張表的數據生成一個映射,管理視圖可以同樣達到操作原表的效果,方便數據的管理以及安全操作。

 

視圖其實就是一條查詢sql語句,用於顯示一個或多個表或其他視圖中的相關數據。視圖將一個查詢的結果作為一個表來使用,因此視圖可以被看作是存儲查詢結果的一個虛擬表。視圖來源於表,所有對視圖數據的修改最終都會被反映到視圖的基表中,這些修改必須服從基表的完整性約束。

視圖的存儲

與表不同,視圖不會要求分配存儲空間,視圖中也不會包含實際的數據。視圖只是定義了一個查詢,視圖中的數據是從基表中獲取,這些數據在視圖被引用時動態的生成。由於視圖基於數據庫中的其他對象,因此一個視圖只需要占用數據字典中保存其定義的空間,而無需額外的存儲空間。

 

視圖的優勢:

1.信息隱藏

     比如s_emp表中有工資,可以創建視圖,隱藏工資信息。(可以配合權限,讓某個用戶只能查看視圖,不能查看表。)

2.使復雜查詢變得簡單。

3.數據獨立

4.相同數據的不同展示形式。

 

視圖的分類:

1.簡單視圖

2.復雜視圖

比較:

簡單視圖 復雜視圖

涉及到的表個數   1 1個或多個

包含函數  不包含 包含

包含組數據   不包含 包含

通過視圖使用DML   可以 不可以

 

 

視圖的創建:

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name

[(alias[, alias]...)]

AS

select 。。。。

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY]

 

note:

1.or replace:代表修改view

2.force| noforce: 即使基表不存在也要建立該視圖 | 基表不存在就不建立此視圖,默認值。

3.alias: 視圖中的列的名字(相當於給子查詢的結果列起別名)

4.子查詢中可以包含復雜的查詢語法,這些細節都對用戶隱藏。

5.子查詢中不能包含order by子句。

6.WITH CHECK OPTION 插入或修改的數據行必須滿足視圖定義的約束;換句話說,加上該關鍵詞表示對view進行dml操作的時候,只能操作select語句中where條件限制的內容

7.WITH READ ONLY :該視圖只讀,不能在這個視圖上進行任何DML操作。

8.查看視圖結構: desc view_name;

例如:

create or replace view myView

as

select id,last_name,start_date

from s_emp

where id <= 4;

 

此時可以使用:

1.查看視圖中所有數據信息

select * from myView

2.執行插入:

 insert into myView values(111,'haha','03-5-16'); 插入成功!

3.再次查看,找不到剛插入的數據,因為這條數據不滿足id<=4,但是查看原始表s_emp,有這條數據。

 

如果:

create or replace view myView

(id,name,s_date)

as

select id,last_name,start_date

from s_emp

where id <= 4

with check option;

 

 此時可以使用:

1.查看視圖中所有數據信息

select * from myView

2.執行插入:

 insert into myView values(121,'haha','03-5-16'); 插入失敗!,因為視圖的約束時id<=4,現在插入的id值為121,所以失敗!

 

 

create or replace view myView

(id,name,s_date)

as

select id,last_name,start_date

from s_emp;

or

create or replace view myView

as

select id,last_name,start_date s_date

from s_emp;

 

myView中列的名字都為id,name,s_Date.

 

 

 

創建復雜視圖:

復雜視圖可能包含分組,組函數,多表連接等。

例如:

CREATE or replace VIEW myView

(name, minsal, maxsal, avgsal)

AS SELECT d.name, MIN(e.salary),

MAX(e.salary), AVG(e.salary)

FROM s_emp e, s_dept d

WHERE e.dept_id = d.id

GROUP BY d.name;

 

查看視圖信息

可以使用數據字典user_views;

 

刪除視圖對象:

ROP VIEW view_name; 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM