SQL SERVER檢視總結
前言:什麼是檢視?
檢視是從一個或幾個基本表(或檢視)匯出的表,它與基本表不同,是一個虛表。它是使用者檢視資料庫表中資料的一種方式,是基於整個查詢結果的虛擬表,使用者通過它來瀏覽感興趣的部分或全部資料。而資料的物理儲存仍然在表中,這些表稱為檢視的基表。資料庫中只存放檢視的定義,而不存放檢視對應的資料,這些資料仍然存放在原來的表中。
目錄
•檢視的優點和缺點
•定義檢視
•查詢檢視
•更新檢視
•刪除檢視
一、檢視的有下列優點:
1、聚焦特定的資料:檢視使使用者只能看到和操縱 他們相關的資料,不需要了解和不使用的資料不加入檢視,這樣可以提高資料的安全性。
2、簡化資料操作:通過將複雜查詢(如多表的連線查詢)定義為檢視,可以簡化操作,不必要每次需要資料時都要提供所需的條件、限制等。
3、定製資料操作:檢視可以讓使用同一資料庫的不同使用者看到不同的資料。可以根據不同的使用者在基本表上製作成不同的檢視。
4、檢視對重構資料庫提供了邏輯獨立性:例如
View Code
上例中,儘管資料庫的邏輯結構改變了,但應用程式並不需要修改,因為新建立的檢視定義的使用者原來的關係,使使用者的外模式不變。使用者仍然可以查詢資料。
5、合併分離資料:使用Union關鍵字可以將兩個或者更多的基於不同表的查詢結果合併為一個單獨的結果集,可以將結果集建立為一個檢視,讓使用者看起開像一個單獨的表。
6、遮蔽資料庫的複雜性:使用者不必瞭解資料庫的表結構。
7、簡化使用者許可權的管理:只需授予使用者使用檢視的許可權,而不必指定使用者只能使用的特定列。
8、便於資料共享:
缺點:
1、可能造成系統性能下降,會使使用者對資料的修改受到很大限制。
二、定義檢視:
前言:什麼是檢視?
檢視是從一個或幾個基本表(或檢視)匯出的表,它與基本表不同,是一個虛表。它是使用者檢視資料庫表中資料的一種方式,是基於整個查詢結果的虛擬表,使用者通過它來瀏覽感興趣的部分或全部資料。而資料的物理儲存仍然在表中,這些表稱為檢視的基表。資料庫中只存放檢視的定義,而不存放檢視對應的資料,這些資料仍然存放在原來的表中。
目錄
•檢視的優點和缺點
•定義檢視
•查詢檢視
•更新檢視
•刪除檢視
一、檢視的有下列優點:
1、聚焦特定的資料:檢視使使用者只能看到和操縱 他們相關的資料,不需要了解和不使用的資料不加入檢視,這樣可以提高資料的安全性。
2、簡化資料操作:通過將複雜查詢(如多表的連線查詢)定義為檢視,可以簡化操作,不必要每次需要資料時都要提供所需的條件、限制等。
3、定製資料操作:檢視可以讓使用同一資料庫的不同使用者看到不同的資料。可以根據不同的使用者在基本表上製作成不同的檢視。
4、檢視對重構資料庫提供了邏輯獨立性:例如
View Code
上例中,儘管資料庫的邏輯結構改變了,但應用程式並不需要修改,因為新建立的檢視定義的使用者原來的關係,使使用者的外模式不變。使用者仍然可以查詢資料。
5、合併分離資料:使用Union關鍵字可以將兩個或者更多的基於不同表的查詢結果合併為一個單獨的結果集,可以將結果集建立為一個檢視,讓使用者看起開像一個單獨的表。
6、遮蔽資料庫的複雜性:使用者不必瞭解資料庫的表結構。
7、簡化使用者許可權的管理:只需授予使用者使用檢視的許可權,而不必指定使用者只能使用的特定列。
8、便於資料共享:
缺點:
1、可能造成系統性能下降,會使使用者對資料的修改受到很大限制。
二、定義檢視:
Create View<檢視名>[(<列名1>[,<列名2>]...)]
AS
<子查詢>
[With Check Option]
說明:With Check Option強制所有通過檢視修改的資料滿足<子查詢>語句中指定的條件。當通過檢視修改一條記錄時,With Check Option保證修改的資料被提交前仍然可以通過檢視看到。如果沒有這個選項,那麼當通過檢視新增或修改資料記錄時,如果他不滿足定義檢視的查詢條件,則他們將從檢視中消失。
例1、建立計算機系學生的檢視 VW_Student_CS
Create View VW_Student_CS
as
select Sno,Sname,Sage from Student
Where Sdept='CS'
說明:本例中省略了檢視中的列名,表示該檢視由子查詢中select字句中的三個目標列名組成。DBMS執行Create View語句的結果只是把對檢視的定義存入資料字典,並不執行Select語句。只是在對檢視進行查詢時,才按檢視的定義從基本表中將資料查詢出來。
例2、由Student、Course、SC 3個表,定義一個計算機系的學生成績檢視,包括學號、姓名、課程名、成績 VW_Stugrade
Create View VW_Stugrade(Stuno,Stuname,Stucourse,Stugrade)
AS
Select Student.Sno,Student.Sname,Course.Cname,SC.Grade
from Student,Course,SC
Where (Student.Sno=SC.Sno) And (Course.Cno=SC.cno) And Sdept='CS'
例3、將有不及格的學生學號、姓名、課程名、成績定義為一個檢視,並限制對檢視的更新不能超過檢視條件限制 VW_StuFail
Create View VW_StuFail
AS
Select St.Sno,St.Sname,C.Cname,SC.grade
from Student St,Course C,SC
Where (St.Sno=SC.Sno) And (C.Cno=SC.Cno) And Grade<60
With Check Option
例4、將學生學號、總成績、平均成績定義為一個檢視 VW_GradeState
Create VW_GradeState
AS
Select Sno,Sum(Grade) AS TotalGrade ,Avg(Grade) as Avg
from SC
group by Sno;
三、修改檢視
例一、修改VW_StuFail檢視,更改為成績優秀的學生資訊
Alter View VW_StuFail
AS
Select St.Sno,St.Sname,C.Cname,SC.grade
from Student St,Course C,SC
Where (St.Sno=SC.Sno) And (C.Cno=SC.Cno) And Grade<60
With Check Option
三、查詢檢視
檢視一經定義,使用者就可以如圖基本表那樣對他進行查詢。但是,檢視中不含有通常意義的元組,檢視查詢其實就是對基本表查詢,查詢結果是從基本表得到的,所以,同一個檢視查詢,在不同的時間可能得到不同的結果,因為表可能發生了變化。
例1、對檢視View_Student_CS進行查詢,找出年齡小於20的學生
Select * From VW_Student_CS where Sage<20
四、更新檢視
由於檢視最終是建立在表上的,所以對檢視的修改等最終被轉化為對基本表的操作,對使用者來說,轉化的過程是透明的。檢視可以和基本表一樣被查詢,但利用檢視進行增刪改查的操作會受到限制,只有具有一定許可權的使用者方可執行特定的操作。為了保護檢視的完整性,需要確保任何通過檢視的更新都不會影響檢視查詢到的資料。可以通過在建立檢視時加入With Check Option選選項來限制。
例1、將檢視VW_Student_CS上的學生08001的姓名改為‘ZHANG LI’.
Update VW_Student_CS
Set Sname='ZHANG LI'
Where Sno='08001'
但是並非所有的檢視都能這樣做,有些檢視上的更新不能轉化為對其基本表的等價操作;
例如:VW_GradeState檢視,將學號為08001的平均成績改為90
Update VW_GeadeState
Set Avg=90
Where Sno='08001'
由於VW_GradeState檢視中一個元組是由基本表SC中若干個元組經過分組再求平均值得到的,所以該操作不會影響SC表的資料,該檢視也不會更新。
五、刪除檢視
Drop View<檢視名>
上面就是對檢視的總結,希望對你有幫助!