數(shù)據(jù)庫(kù)課件:關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL視圖_第1頁(yè)
數(shù)據(jù)庫(kù)課件:關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL視圖_第2頁(yè)
數(shù)據(jù)庫(kù)課件:關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL視圖_第3頁(yè)
數(shù)據(jù)庫(kù)課件:關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL視圖_第4頁(yè)
數(shù)據(jù)庫(kù)課件:關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL視圖_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL

__視圖5.5視圖視圖是關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)提供給用戶以多種角度觀察數(shù)據(jù)庫(kù)中數(shù)據(jù)的重要機(jī)制。視圖就像一個(gè)窗口,透過它可以看到數(shù)據(jù)庫(kù)中自己感興趣的數(shù)據(jù)及其變化。視圖的特點(diǎn)虛表,是從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表只存放視圖的定義,不會(huì)出現(xiàn)數(shù)據(jù)冗余基表中的數(shù)據(jù)發(fā)生變化,從視圖中查詢出的數(shù)據(jù)也隨之改變5.5視圖定義視圖查詢視圖更新視圖視圖的作用5.5.1定義視圖1.建立視圖2.刪除視圖1.建立視圖[例1]建立信息系學(xué)生的視圖。

CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept='IS'建立視圖(續(xù))語(yǔ)句格式

CREATEVIEW<視圖名>[(<列名>[,<列名>]…)]AS<子查詢>[WITHCHECKOPTION]

建立視圖(續(xù))組成視圖的屬性列名或全部省略或全部指定省略視圖的各個(gè)屬性列名,則隱含該視圖由子查詢中SELECT子句目標(biāo)列中的諸字段組成。必須明確指定組成視圖的所有列名的情形(1)某個(gè)目標(biāo)列不是單純的屬性名,而是集函數(shù)或列表達(dá)式(2)多表連接時(shí)選出了幾個(gè)同名列作為視圖的字段(3)需要在視圖中為某個(gè)列啟用新的更合適的名字

建立視圖(續(xù))子查詢子查詢可以是任意復(fù)雜的SELECT語(yǔ)句。但不能含ORDERBY子句和DISTINCT短語(yǔ)的SELECT語(yǔ)句WITHCHECKOPTION透過視圖進(jìn)行增刪改操作時(shí),不得破壞視圖定義中的謂詞條件(即子查詢中的條件表達(dá)式)

建立視圖(續(xù))DBMS執(zhí)行CREATEVIEW語(yǔ)句時(shí)只是把視圖的定義存入數(shù)據(jù)字典,并不執(zhí)行其中的SELECT語(yǔ)句。只是在對(duì)視圖查詢時(shí),才按視圖的定義從基本表中將數(shù)據(jù)查出。

建立視圖(續(xù))常見的視圖形式行列子集視圖WITHCHECKOPTION的視圖基于多個(gè)基表的視圖基于視圖的視圖帶表達(dá)式的視圖分組視圖

建立視圖(續(xù))(1)行列子集視圖從單個(gè)基本表導(dǎo)出只是去掉了基本表的某些行和某些列,但保留了碼。

建立視圖(續(xù))

[例1]建立信息系學(xué)生的視圖。

CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept='IS'行列子集視圖視圖IS_Student由Sno,Sname,Sage三列組成

建立視圖(續(xù))(2)WITHCHECKOPTION的視圖[例2]建立信息系學(xué)生的視圖,并要求透過該視圖進(jìn)行的更新操作只涉及信息系學(xué)生。

CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept='IS'WITHCHECKOPTION

建立視圖(續(xù))對(duì)IS_Student視圖的更新操作修改操作:DBMS自動(dòng)加上Sdept='IS'的條件刪除操作:DBMS自動(dòng)加上Sdept='IS'的條件插入操作:DBMS自動(dòng)檢查Sdept屬性值是否為'IS'如果不是,則拒絕該插入操作如果沒有提供Sdept屬性值,則自動(dòng)定義Sdept為'IS'建立視圖(續(xù))(3)基于多個(gè)基表的視圖

[例3]建立信息系選修了1號(hào)課程的學(xué)生視圖。

CREATEVIEWIS_S1(Sno,Sname,Grade)ASSELECTStudent.Sno,Sname,GradeFROMStudent,SCWHERESdept='IS'ANDStudent.Sno=SC.SnoANDSC.Cno='1'由于視圖IS_S1的屬性列中包含了Student表與SC表的同名列Sno,所以必須在視圖名后面明確說明視圖的各個(gè)屬性列名。

建立視圖(續(xù))(4)基于視圖的視圖

[例5]建立信息系選修了1號(hào)課程且成績(jī)?cè)?0分以上的學(xué)生的視圖。

CREATEVIEWIS_S2ASSELECTSno,Sname,GradeFROMIS_S1WHEREGrade>=90

視圖IS_S2建立在視圖IS_S1之上

建立視圖(續(xù))(5)帶表達(dá)式的視圖在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),為了減少數(shù)據(jù)冗余,基本表中只存放基本數(shù)據(jù),由基本數(shù)據(jù)經(jīng)過各種計(jì)算派生出的數(shù)據(jù)一般是不存儲(chǔ)的。由于視圖中的數(shù)據(jù)并不實(shí)際存儲(chǔ),所以定義視圖時(shí)可以根據(jù)應(yīng)用的需要,設(shè)置一些派生屬性列,以方便應(yīng)用程序的編制。派生屬性稱為虛擬列。帶虛擬列的視圖稱為帶表達(dá)式的視圖。帶表達(dá)式的視圖必須明確定義組成視圖的各個(gè)屬性列名

建立視圖(續(xù))[例6]定義一個(gè)反映學(xué)生出生年份的視圖。

CREATEVIEWBT_S(Sno,Sname,Sbirth)ASSELECTSno,Sname,2013-Sage FROMStudent

建立視圖(續(xù))(6)分組視圖用帶集函數(shù)和GROUPBY子句的查詢來(lái)定義的視圖稱為分組視圖分組視圖必須明確定義組成視圖的各個(gè)屬性列名

建立視圖(續(xù))[例7]將學(xué)生的學(xué)號(hào)及他的平均成績(jī)定義為一個(gè)視圖。

CREATVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno2.刪除視圖語(yǔ)句格式

DROPVIEW<視圖名>;該語(yǔ)句從數(shù)據(jù)字典中刪除指定的視圖定義由該視圖導(dǎo)出的其他視圖定義仍在數(shù)據(jù)字典中,但已不能使用,必須顯式刪除刪除基表時(shí),由該基表導(dǎo)出的所有視圖定義都必須顯式刪除刪除視圖(續(xù))

[例9]刪除視圖IS_S1DROPVIEWIS_S1;

執(zhí)行此語(yǔ)句后,IS_S1視圖的定義將從數(shù)據(jù)字典中刪除。由IS_S1視圖導(dǎo)出IS_S2視圖已無(wú)法使用,但其定義雖然仍在數(shù)據(jù)字典中。5.5.2查詢視圖從用戶角度而言,查詢視圖與查詢基本表的方法相同。DBMS實(shí)現(xiàn)視圖查詢的方法視圖消解法(ViewResolution)首先進(jìn)行有效性檢查,檢查查詢的表、視圖等是否存在。如果存在,則從數(shù)據(jù)字典中取出視圖的定義把視圖定義中的子查詢與用戶的查詢結(jié)合起來(lái),轉(zhuǎn)換成等價(jià)的對(duì)基本表的查詢。然后再執(zhí)行修正后的查詢。查詢視圖(續(xù))[例1]在信息系學(xué)生的視圖中找出年齡小于20歲的學(xué)生。

SELECTSno,SageFROMIS_StudentWHERESage<20;IS_Student視圖的定義(視圖定義例1):

CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept='IS‘;查詢視圖(續(xù))視圖消解法轉(zhuǎn)換后的查詢語(yǔ)句為:SELECTSno,SageFROMStudentWHERESdept='IS'ANDSage<20;查詢視圖(續(xù))[例2]查詢信息系選修了1號(hào)課程的學(xué)生SELECTSno,SnameFROMIS_Student,SCWHEREIS_Student.Sno=SC.SnoANDSC.Cno='1';查詢視圖(續(xù)) [例3]在S_G視圖中查詢平均成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào)和平均成績(jī)SELECT*FROMS_GWHEREGavg>=90;查詢視圖(續(xù))S_G視圖定義:

CREATEVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno;查詢視圖(續(xù))轉(zhuǎn)換后的查詢:SELECTSno,AVG(Grade)FROMSCGROUPBYSnoHAVINGAVG(Grade)>=90;查詢視圖(續(xù))視圖消解法的局限有些情況下,視圖消解法不能生成正確查詢。采用視圖消解法的DBMS會(huì)限制這類查詢。

5.5.3更新視圖從用戶角度而言,更新視圖與更新基本表的方法相同由于視圖是不實(shí)際存儲(chǔ)數(shù)據(jù)的虛表,因此對(duì)視圖的更新,最終要轉(zhuǎn)換為對(duì)基本表的更新。更新視圖(續(xù))定義視圖時(shí)最好指定WITHCHECKOPTION子句,這樣DBMS在更新視圖時(shí)會(huì)進(jìn)行檢查,防止用戶通過視圖對(duì)數(shù)據(jù)進(jìn)行增加、刪除、修改時(shí),操作不屬于視圖范圍內(nèi)的基本表數(shù)據(jù)。更新視圖(續(xù))[例1]將信息系學(xué)生視圖IS_Student中學(xué)號(hào)為95002的學(xué)生姓名改為“劉辰”。UPDATEIS_StudentSETSname='劉辰'WHERESno='95002';更新視圖(續(xù))轉(zhuǎn)換為對(duì)基本表更新:UPDATEStudentSETSname='劉辰'WHERESno='95002'ANDSdept='IS';更新視圖(續(xù))[例2]向信息系學(xué)生視圖IS_S中插入一個(gè)新的學(xué)生記錄,其中學(xué)號(hào)為95029,姓名為趙新,年齡為20歲。INSERTINTOIS_StudentVALUES('95029','趙新',20);更新視圖(續(xù))轉(zhuǎn)換為對(duì)基本表的更新:INSERTINTOStudent(Sno,Sname,Sage,Sdept)VALUES('95029','趙新',20,'IS');更新視圖(續(xù))[例3]刪除計(jì)算機(jī)系學(xué)生視圖CS_S中學(xué)號(hào)為95029的記錄DELETEFROMIS_StudentWHERESno='95029';更新視圖(續(xù))轉(zhuǎn)換為對(duì)基本表的操作:DELETEFROMStudentWHERESno='95029'ANDSdept='IS';更新視圖(續(xù))DBMS對(duì)視圖更新的限制一些視圖是不可更新的,因?yàn)閷?duì)這些視圖的更新不能唯一地有意義地轉(zhuǎn)換成對(duì)相應(yīng)基本表的更新例:視圖S_G為不可更新視圖。

CREATEVIEWS_G(Sno,Gavg)AS SELECTSno,AVG(Grade) FROMSC GROUPBYSno;更新視圖(續(xù))S_G“平均成績(jī)”Gavg屬性列為導(dǎo)出列對(duì)于如下更新語(yǔ)句:UPDATES_GSETGavg=90WHERESno='95001';無(wú)法將其轉(zhuǎn)換成對(duì)基本表SC的更新的更新視圖(續(xù))視圖的可更新性行列子集視圖是可更新的。除行列子集視圖外,還有些視圖理論上是可更新的,但它們的確切特征還是尚待研究的課題。還有些視圖從理論上是不可更新的。5.5.4視圖的作用視圖最終是定義在基本表之上的,對(duì)視圖的一切操作最終也要轉(zhuǎn)換為對(duì)基本表的操作。而且對(duì)于非行列子集視圖進(jìn)行查詢或更新時(shí)還有可能出現(xiàn)問題。既然如此,為什么還要定義視圖呢?視圖的作用(續(xù))合理使用視圖能夠帶來(lái)許多好處1.視圖能夠簡(jiǎn)化用戶的操作

2.視圖使用戶能以多種角度看待同一數(shù)據(jù)3.視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性4.視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)1.視圖能夠簡(jiǎn)化用戶的操作視圖機(jī)制使用戶可以將注意力集中在所關(guān)心的數(shù)據(jù)上。2.視圖使用戶能以多種角度看待同一數(shù)據(jù)視圖機(jī)制能使不同用戶以不同方式看待同一數(shù)據(jù),適應(yīng)數(shù)據(jù)庫(kù)共享的需要。3.視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性物理獨(dú)立性與邏輯獨(dú)立性的概念視圖在一定程度上保證了數(shù)據(jù)的邏輯獨(dú)立性視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性(續(xù))例:數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)發(fā)生改變將學(xué)生關(guān)系Student(Sno,Sname,Ssex,Sage,Sdept)

“垂直”地分成兩個(gè)基本表:

SX(Sno,Sname,Sage)SY(Sno,Ssex,Sdept)視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性(續(xù))通過建立一個(gè)視圖Student:CREATEVIEWStudent(Sno,Sname,Ssex,Sage,Sdept)ASSELECTSX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.Sdept

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論