復(fù)件數(shù)據(jù)庫應(yīng)用技術(shù)三章習(xí)題_第1頁
復(fù)件數(shù)據(jù)庫應(yīng)用技術(shù)三章習(xí)題_第2頁
復(fù)件數(shù)據(jù)庫應(yīng)用技術(shù)三章習(xí)題_第3頁
復(fù)件數(shù)據(jù)庫應(yīng)用技術(shù)三章習(xí)題_第4頁
復(fù)件數(shù)據(jù)庫應(yīng)用技術(shù)三章習(xí)題_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

14三月2024多重條件查詢例21.查詢計算機系年齡在20歲以下的學(xué)生姓名。

SELECTSnameFROMStudentWHERESdept='CS'ANDSage<20

14三月2024示例例22.將學(xué)生按年齡的升序排序。

SELECT*FROMStudentORDERBYSage例23.查詢選修了‘c02’號課程的學(xué)生的學(xué)號及其成績,查詢結(jié)果按成績降序排列。SELECTSno,GradeFROMSC WHERECno='c02'ORDERBYGradeDESC

例24.查詢?nèi)w學(xué)生的信息,查詢結(jié)果按所在系的系名升序排列,同一系的學(xué)生按年齡降序排列。SELECT*FROMStudent

ORDERBYSdept,SageDESC

14三月2024示例例25.統(tǒng)計學(xué)生總?cè)藬?shù)。

SELECTCOUNT(*)FROMStudent

例26.統(tǒng)計選修了課程的學(xué)生的人數(shù)。

SELECTCOUNT(DISTINCTSno)FROMSC例27.計算9512101號學(xué)生的考試總成績之和。SELECTSUM(Grade)FROMSCWHERESno='9512101'

14三月2024示例(續(xù))例28.計算’C01’號課程學(xué)生的考試平均成績。

SELECTAVG(Grade)FROMSCWHERECno='C01'例29.查詢選修了’C01’號課程的學(xué)生的最高分和最低分。

SELECTMAX(Grade),MIN(Grade)FROMSCWHERECno='C01'注意:計算函數(shù)不能出現(xiàn)在WHERE子句中

14三月2024

使用GROUPBY例30.統(tǒng)計每門課程的選課人數(shù),列出課程號和人數(shù)。

SELECTCnoas課程號,COUNT(Sno)as選課人數(shù)

FROMSCGROUPBYCno

對查詢結(jié)果按Cno的值分組,所有具有相同Cno值的元組為一組,然后再對每一組使用COUNT計算,求得每組的學(xué)生人數(shù)。14三月2024SnoCnoGrade951201C0180951201C0278951202C0190952103C0288952103C0185952103C0391952103C0474CnoCount(Sno)C013C022C031C041SnoCnoGrade951201C0180951202C0190952103C0185951201C0278952103C0288952103C0391952103C047414三月2024

例31.查詢每名學(xué)生的選課門數(shù)和平均成績。

SELECTSnoas學(xué)號,COUNT(*)as選課門數(shù),AVG(Grade)as平均成績

FROMSCGROUPBYSno14三月20242.使用HAVING例32.查詢修了3門以上課程的學(xué)生的學(xué)號

SELECTSnoFROMSCGROUPBYSno

HAVINGCOUNT(*)>3

14三月2024示例例33.查詢修課門數(shù)等于或大于4門的學(xué)生的平均成績和選課門數(shù)。

SELECTSno,AVG(Grade)平均成績,COUNT(*)修課門數(shù)

FROMSCGROUPBYSno

HAVINGCOUNT(*)>=4

14三月2024

例34.查詢計算機系學(xué)生的修課情況,要求列出學(xué)生的名字、所修課的課程號和成績。

SELECTSname,Cno,GradeFROMStudentJOINSCONStudent.Sno=SC.SnoWHERESdept='計算機系'14三月2024

例35.查詢信息系修了VB課程的學(xué)生的修課成績,要求列出學(xué)生姓名、課程名和成績。SELECTSname,Cname,GradeFROMStudentsJOINSCONs.Sno=SC.SnoJOINCoursecONc.Cno=SC.CnoWHERESdept='信息系'ANDCname='VB'14三月2024

例36.查詢所有修了VB課程的學(xué)生的修課情況,要求列出學(xué)生姓名和所在的系。SELECTSname,SdeptFROMStudentSJOINSCONS.Sno=SC.SnoJOINCourseCONC.Cno=oWHERECname='VB'14三月2024例37.查詢與劉晨在同一個系學(xué)習(xí)的學(xué)生的姓名和所在的系。SELECTS2.Sname,S2.SdeptFROMStudentS1JOINStudentS2ONS1.Sdept=S2.SdeptWHERES1.Sname=‘劉晨’

ANDS2.Sname!=‘劉晨’14三月2024

例38.查詢學(xué)生的修課情況,包括修了課程的學(xué)生和沒有修課的學(xué)生。

SELECTStudent.Sno,Sname,Cno,Grade FROMStudentLEFTOUTERJOINSC ONStudent.Sno=SC.Sno14三月2024示例例39.查詢與劉晨在同一個系的學(xué)生。

SELECTSno,Sname,SdeptFROMStudent WHERESdeptIN (SELECTSdeptFROMStudent WHERESname=‘劉晨’)ANDSname!=‘劉晨’②①14三月2024示例例40.查詢成績?yōu)榇笥?0分的學(xué)生的學(xué)號、姓名。

SELECTSno,SnameFROMStudent WHERESnoIN (SELECTSnoFROMSC WHEREGrade>90)①②14三月2024

例41.查詢選修了“數(shù)據(jù)庫基礎(chǔ)”課程的學(xué)生的學(xué)號、姓名。

SELECTSno,SnameFROMStudent WHERESnoIN (SELECTSnoFROMSC WHERECnoIN (SELECTCnoFROMCourse WHERECname='數(shù)據(jù)庫基礎(chǔ)'))14三月2024

例42.查詢修了‘c02’課程且成績高于此課程的平均成績的學(xué)生的學(xué)號和成績。SELECTSno,GradeFROMSC WHERECno='c02‘a(chǎn)ndGrade>(SELECTAVG(Grade)fromSCWHERECno='c02')

14三月2024

例43.查詢選修了‘c01’號課程的學(xué)生姓名。SELECTSnameFROMStudent WHEREEXISTS (SELECT*FROMSC WHERESno=Student.Sno

ANDCno='c01')

14三月2024

例44.查詢沒有選修‘c01’號課程的學(xué)生姓名和所在系。SELECTSname,SdeptFROMStudentWHERENOTEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno='c01')14三月2024

查詢選修全部課程的學(xué)生姓名Selectsnamefromstudentswherenotexists(Select*fromcoursecwherenotexists(select*fromscwheres.sno=sc.snoando))14三月2024帶有EXISTS謂詞的子查詢(續(xù))[例47]查詢至少選修了學(xué)生001025選修的全部課程的學(xué)生號碼。解題思路:用邏輯蘊函表達:查詢學(xué)號為x的學(xué)生,對所有的課程y,只要001025學(xué)生選修了課程y,則x也選修了y。形式化表示: 用P表示謂詞“學(xué)生001025選修了課程y”

用q表示謂詞“學(xué)生x選修了課程y”

則上述查詢?yōu)?(

y)p

q

14三月2024帶有EXISTS謂詞的子查詢(續(xù))等價變換:

(

y)p

q≡

(

y(

(p

q))≡

(

y(

(

p∨q)))≡

y(p∧

q)變換后語義:不存在這樣的課程y,學(xué)生001025選修了y,而學(xué)生x沒有選。14三月2024帶有EXISTS謂詞的子查詢(續(xù))

用NOTEXISTS謂詞表示:

SELECTDISTINCTxhFROMtestt1WHERENOTEXISTS(SELECT*FROMtestt2WHEREt2.xh='001025'ANDNOTEXISTS(SELECT*FROMtestt3WHEREt3.xh=t1.xhANDt3.kch=t2.kch));14三月2024集合查詢集合操作的種類并操作UNION交操作INTERSECT差操作EXCEPT參加集合操作的各查詢結(jié)果的列數(shù)必須相同;對應(yīng)項的數(shù)據(jù)類型也必須相同14三月2024

查詢選修了c1并且選修了c2的學(xué)生學(xué)號查詢選修了c1并且沒選修c2的學(xué)生學(xué)號14三月2024小結(jié)數(shù)據(jù)檢索語句Select[all|distinct]|[top<數(shù)值>[percent]]<查詢列>[into<新表名>][from<數(shù)據(jù)源>][where<條件表達式>][groupby<分組條件>][having<組選擇表達式>][orderby<排序條件>,<排序條件>][compute<統(tǒng)計列組>][by<表達式>]14三月2024數(shù)據(jù)檢索語句

Select子句說明Select[all|distinct]|[top<數(shù)值>[percent]]<查詢列組>查詢列組:*|<表或視圖>.*|<列名或表達式>[as]<列別名>|<列別名>=<表達式>14三月2024數(shù)據(jù)檢索語句

Into子句用于創(chuàng)建一個新表或臨時表不能與compute子句一起使用14三月2024數(shù)據(jù)檢索語句

數(shù)據(jù)源<表名>[[as]<表別名>]|<視圖名>[[as]<視圖別名>]|<行集合函數(shù)>[[as]<別名>]|<嵌套的select語句>[[as]<別名>]

|<連接表>14三月2024數(shù)據(jù)檢索語句連接表:<數(shù)據(jù)源1><連接類型><數(shù)據(jù)源2>on<連接條件>|<數(shù)據(jù)源1>join<數(shù)據(jù)源2>連接類型:Innerjoin|leftouterjoin|rightouterjoin|fullouterjoin14三月2024數(shù)據(jù)檢索語句Groupby子句Groupby[all]<分組表達式>All:在結(jié)果集中包含所有的組,即還包含一個不滿足條件的組14三月2024數(shù)據(jù)檢索語句Computeby子句與orderby配合使用建立匯總摘要或分組匯總摘要換行控制和分段小計與groupby不同,可以看到分組詳細信息14三月2024

Select書號,書名,定價from圖書Where類別=‘計算機類’Orderby書號ascComputecount(*),sum(定價)by出版社Computecount(*),sum(定價)14三月20243.5數(shù)據(jù)更改功能3.5.1插入數(shù)據(jù)3.5.2更新數(shù)據(jù)3.5.3刪除數(shù)據(jù)14三月20243.5.1插入數(shù)據(jù)插入單行記錄的INSERT語句的格式為:

INSERTINTO<表名>[(<列名表>)]VALUES(值表)功能:新增一個符合表結(jié)構(gòu)的數(shù)據(jù)行,將值表數(shù)據(jù)按表中列定義順序[或列名表順序]賦給對應(yīng)列名。14三月2024注意值列表中的值與列名表中的列按位置順序?qū)?yīng),它們的數(shù)據(jù)類型必須一致。如果<表名>后邊沒有指明列名,則新插入記錄的值的順序必須與表中列的定義順序一致,且每一個列均有值(可以為空)。14三月2024

INSERTINTO表名[(字段名[,字段名]…)]子查詢;多記錄插入:對每一個系求學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫

CREATETABLEDEPTAGE(SDEPTCHAR(15),AVGAGEINT);

INSERTINTODEPTAGE(SDEPT,AVGAGE)SELECTSD,AVG(SA)FROMSGROUPBYSD;14三月2024示例例1.將新生記錄(95020,陳冬,男,信息系,18歲)插入到Student表中。

INSERTINTOStudentVALUES('9521105','陳冬','男',18,'信息系')例2.在SC表中插入一新記錄,成績暫缺。

INSERTINTOSC(Sno,Cno,XKLB)VALUES(‘9521105’,‘c01’,‘必修')

實際插入的值為:

(‘9521105’,‘c01’,NULL,‘必修')14三月20243.5.2更新數(shù)據(jù)用UPDATE語句實現(xiàn)。格式:

UPDATE<表名>SET<列名=表達式>[,…n][WHERE<更新條件>]UPDATE<表名>SET<列名=表達式>[,…n]from<數(shù)據(jù)源>[WHERE<更新條件>]14三月2024無條件更新例1.將所有學(xué)生的年齡加1。

UPDATEStudentSETSage=Sage+114三月2024有條件更新1.基于本表條件的更新例2.將‘9512101’學(xué)生的年齡改為21歲

UPDATEStudentSETSage=21 WHERESno='9512101'14三月20242.基于其他表條件的更新例3:將計算機系全體學(xué)生的成績加5分。(1)用子查詢實現(xiàn)

UPDATESCSETGrade=Grade+5 WHERESnoIN (SELECTSnoFROMStudent WHERESdept='計算機系')(2)用多表連接實現(xiàn)UPDATESCSETGrade=Grade+5FROMSCJOINStudentONSC.Sno=Student.SnoWHERESdept='計算機系'14三月20243.5.3刪除數(shù)據(jù)用DELETE語句實現(xiàn)格式:DELETE[from]<表名>[WHERE<刪除條件>]DELETE[from]<表名>from<數(shù)據(jù)源>[WHERE<刪除條件>]14三月2024無條件刪除例1.刪除所有學(xué)生的選課記錄。

DELETEFROMSC

14三月2024有條件刪除(1)基于本表條件的刪除。例2.刪除所有不及格學(xué)生的修課記錄。

DELETEFROMSCWHEREGrade<60

14三月2024基于其他表條件的刪除例3.刪除計算機系不及格學(xué)生的修課記錄。(1)用子查詢實現(xiàn)

DELETEFROMSCWHEREGrade<60ANDSnoIN(SELECTSnoFROMStudentWHERESdept=‘計算機系’)(2)用多表連接實現(xiàn)

DELETEFROMSC FROMSCJOINStudentONSC.Sno=Student.Sno WHERESdept=‘計算機系’ANDGrade<60

14三月20243.6索引1.索引的特點2.索引的用途3.創(chuàng)建索引的原則4.索引的類型及選擇5.索引的創(chuàng)建6.索引的撤消

14三月20241.索引的特點

索引:是一個指向表中數(shù)據(jù)的指針。DB中,索引具有與書籍中目錄同樣作用。查詢被定向于DB中數(shù)據(jù)在數(shù)據(jù)文件中的地址。索引是SQL在基本表中列上建立的一種DB對象,也可稱其為索引文件。它和建立于其上的基本表是分開存儲的。建立索引的主要目的是提高數(shù)據(jù)檢索的性能。索引可被創(chuàng)建或撤消,這對數(shù)據(jù)毫無影響。當(dāng)索引被撤消,數(shù)據(jù)查詢的速度可能會變慢。

14三月20242.索引的用途

⑴提高數(shù)據(jù)查詢的速度進行數(shù)據(jù)查詢時,如不使用索引,則需將數(shù)據(jù)文件分塊,逐個讀到內(nèi)存,再進行查找的比較操作(基本表的列和元組較多,數(shù)據(jù)文件很大)。使用索引,系統(tǒng)先將索引文件讀入內(nèi)存,根據(jù)索引項找到元組的地址,然后再根據(jù)地址將元組數(shù)據(jù)直接讀入內(nèi)存。索引文件只含有索引項和元組地址,文件小,一般可一次讀入內(nèi)存。索引文件索引項是有序的,可很快找到索引項值和元組地址。使用索引大大減少了磁盤的I/O次數(shù),可加快查詢速度。

14三月2024⑵保證數(shù)據(jù)的惟一性索引的定義中包括定義數(shù)據(jù)惟一性的內(nèi)容。當(dāng)定義了數(shù)據(jù)惟一性的功能后,在對相關(guān)的索引項進行數(shù)據(jù)輸入或數(shù)據(jù)更新時,系統(tǒng)要進行檢查,以確保其數(shù)據(jù)惟一性成立。⑶加快表連接的速度在進行基本表連接操作時,系統(tǒng)需要對被連接的基本表的連接字段進行查詢,其工作量是非??捎^的。若在被連接的基本表的連接字段上創(chuàng)建索引,則可大大提高連接操作的速度。許多系統(tǒng)要求連接文件必須有相應(yīng)索引,才能執(zhí)行連接操作。

14三月20243.創(chuàng)建索引的原則⑴索引的創(chuàng)建和維護由DBA和DBMS完成索引由DBA或表的擁有者負(fù)責(zé)創(chuàng)建和撤消,其他用戶不能隨意創(chuàng)建和撤消索引。索引由系統(tǒng)自動選擇和維護。(不需要用戶指定使用索引,也不需要用戶打開索引或?qū)λ饕龍?zhí)行重索引操作,這些工作都由DBMS自動完成)。

14三月2024⑵是否創(chuàng)建索引取決于表的數(shù)據(jù)量大小和對查詢的要求基本表中記錄的數(shù)量越多,記錄越長,越有必要創(chuàng)建索引,創(chuàng)建索引后加快查詢速度的效果越明顯。記錄較少的基本表,創(chuàng)建索引意義不大。索引要根據(jù)數(shù)據(jù)查詢或處理的要求而創(chuàng)建(對那些查詢頻度高、實時性要求高的數(shù)據(jù)一定要建立索引,否則不必考慮創(chuàng)建索引的問題)。

14三月2024⑶一個基本表,不要建過多索引索引文件占用文件目錄和存儲空間,索引過多會使系統(tǒng)負(fù)擔(dān)加重。索引需要自身維護,當(dāng)基本表的數(shù)據(jù)增加、刪除或修改時,索引文件要隨之變化,以保持與基本表一致。索引過多會影響數(shù)據(jù)增、刪、改的速度。

14三月2024避免使用索引的情形⑴包含太多重復(fù)值的列;⑵查詢中很少被引用的列;⑶值特別長的列;⑷查詢返回率很高的列;⑸具有很多NULL值的列;⑹需要經(jīng)常插、刪、改的列;⑺記錄較少的基本表;⑻需進行頻繁、大批量數(shù)據(jù)更新的基本表。

14三月20244.索引的類型及選擇⑴單列索引。是對基本表的某一單獨的列進行索引,是最簡單和最常用的索引類型,它是在表的某一列的基礎(chǔ)上建立的。⑵惟一索引。惟一索引不允許在表中插入任何相同的取值。使用惟一索引不但能提高性能,還可以維護數(shù)據(jù)的完整性。⑶復(fù)合索引。針對基本表中兩個或兩個以上的列建立的索引。由于被索引列的順序?qū)?shù)據(jù)查詢速度具有顯著的影響,所以創(chuàng)建復(fù)合索引時,應(yīng)當(dāng)考慮索引的性能。為優(yōu)化性能,通常將最強限定值放在第一位。不過,那些始終被指定的列更應(yīng)當(dāng)放在第一位。

14三月20245.索引的創(chuàng)建

語句格式:CREATE[UNIQUE][CLUSTERED]INDEX<索引名>

ON<表名>(<列名1>[<次序>][,<列名2>[<次序>]]…);功能:為基本表創(chuàng)建索引。

說明:⑴<表名>是要創(chuàng)建索引的基本表名字。索引可建在該表的一列或多列上,各列名間用逗號分隔;⑵每個<列名>后面還可用<次序>指定索引值的排列次序,次序可選ASC(升序)或DESC(降序),默認(rèn)值為ASC;⑶

UNIQUE表示該索引的每一個索引值只對應(yīng)惟一的數(shù)據(jù)記錄;

14三月2024⑷CLUSTERED表示建立聚簇索引聚簇索引是SQLServer提供的一種索引形式,它使基本表中數(shù)據(jù)的物理順序與索引項的排列順序一致。創(chuàng)建聚簇索引可提高查詢效率,但創(chuàng)建聚簇索引后,在更新索引列數(shù)據(jù)時,往往會導(dǎo)致表中記錄的物理順序的變更,因而代價是較大的。一個基本表上最多只能建一個聚族索引,對于經(jīng)常更新的列不宜建立聚簇索引。⑸SQL中的索引是非顯示索引。即在索引創(chuàng)建以后,用戶在索引撤消前不會再用到該索引名,但是索引在用戶查詢時會自動起作用。

14三月20246.索引的撤消語句格式:DROPINDEX<索引名>[,…n]功能:在DB中撤消指定的索引。說明:⑴<索引名>是要撤消的索引的名字;⑵

撤消索引時,系統(tǒng)會同時從DD中刪除有關(guān)對該索引的描述;⑶

一次可撤消一個或多個指定的索引,索引名間逗號間隔。

14三月20243.7視圖1視圖概念2視圖的優(yōu)點3視圖的創(chuàng)建4視圖的查詢5視圖的更新6視圖的撤消14三月20241視圖概念視圖可以被看成是虛擬表。視圖中的數(shù)據(jù)不物理地存儲在數(shù)據(jù)庫內(nèi)。SELECT語句的結(jié)果集構(gòu)成了視圖的內(nèi)容?;颈?基本表2視圖14三月20242.視圖的優(yōu)點⑴簡化用戶操作。使用戶將注意力集中在視圖所關(guān)聯(lián)的數(shù)據(jù)上;⑵使用戶能以多種角度看待同一數(shù)據(jù)(可使不同的用戶以不同的方式看待同一數(shù)據(jù));⑶對機密數(shù)據(jù)提供安全保護。在設(shè)計DB應(yīng)用系統(tǒng)時,對不同的用戶定義不同的視圖,使機密數(shù)據(jù)不出現(xiàn)在不應(yīng)看到這些數(shù)據(jù)的用戶視圖上,自動提供了對機密數(shù)據(jù)的安全保護功能;⑷為DB重構(gòu)提供一定的邏輯獨立性。如果只是通過視圖來存取DB中的數(shù)據(jù),DBA可以有選擇地改變構(gòu)成視圖的基本表,而不用考慮那些通過視圖引用數(shù)據(jù)的應(yīng)用程序的改動。

14三月20243.視圖的創(chuàng)建創(chuàng)建視圖實際上就是DB執(zhí)行定義該視圖的查詢語句。語句格式:

CREATEVIEW<視圖名>[(<列名>[,<列名>]…)]

AS<子查詢>[WITHCHECKOPTION];功能:定義視圖名和視圖結(jié)構(gòu),并將<子查詢>得到的元組作為視圖的內(nèi)容。

14三月2024說明:

⑴<子查詢>可以是任意復(fù)雜的SELECT語句,但通常不允許含有ORDERBY(對查詢結(jié)果進行排序)和DISTINCT(從查詢返回結(jié)果中刪除重復(fù)行)短語;⑵

WITHCHECKOPTION表示對視圖進行UPDATE、INSERT和DELETE操作時要保證更新、插入和刪除的行滿足視圖定義中的謂詞條件,即<子查詢>中WHERE子句的條件表達式。選擇該子句,則系統(tǒng)對UPDATE、INSERT和DELETE操作進行檢查;

14三月2024⑷

該語句執(zhí)行的結(jié)果,僅是將視圖的定義信息存入DB的DD中,而定義中的<子查詢>語句并不執(zhí)行。當(dāng)系統(tǒng)運行到包含該視圖定義語句的程序時,根據(jù)DD中的視圖的定義信息臨時生成該視圖。程序一旦執(zhí)行結(jié)束,該視圖立即被撤銷。

14三月2024⑶視圖的列名或全部指定或全部省略若省略視圖各個列名,則表明該視圖各列由<子查詢>中SELECT子句各目標(biāo)列組成。

下列情況,必須指定組成視圖的所有列名:①目標(biāo)列不是單純的列名,而是集函數(shù)或列表達式;②<子查詢>中使用多個表或視圖,且目標(biāo)列中含有相同的列名;③需要在視圖中改用新的、更合適的列名。

14三月2024定義單源表視圖建立信息系學(xué)生的視圖。

CREATEVIEWIS_Student AS SELECTSno,Sname,Sage FROMStudentWHERESdept='信息系'14三月2024定義多源表視圖建立信息系選修了‘c01’號課程的學(xué)生的視圖。CREATEVIEWV_IS_S1(Sno,Sname,Grade)AS SELECTStudent.Sno,Sname,SageFROMStudentJOINSCONStudent.Sno=SC.SnoWHERESdept='信息系'ANDSC.Cno='c01'14三月2024在已有視圖上定義新視圖建立信息系選修了‘c01’號課程且成績在90分以上的學(xué)生的視圖。CREATEVIEW

V_IS_S2AS SELECTSno,Sname,GradeFROMV_IS_S1

WHEREGrade>=90

14三月2024定義帶表達式的視圖定義一個反映學(xué)生出生年份的視圖。

CREATEVIEW

BT_S(Sno,Sname,Sbirth) ASSELECTSno,Sname,2005-SageFROMStudent

14三月2024含分組統(tǒng)計信息的視圖定義一個存放每個學(xué)生的學(xué)號及平均成績的視圖。

CREATEVIEWS_G(Sno,AverageGrade) ASSELECTSno,AVG(Grade)FROMSC GROUPBYSno14三月20244.視圖的查詢是對基本表的查詢,其查詢結(jié)果是從基本表得到,所以,同樣一個視圖查詢,在不同的執(zhí)行時間可能得到不同的結(jié)果,因為在這段時間里,基本表可能發(fā)生了變化。DBMS執(zhí)行對視圖的查詢時,首先進行有效性檢查,檢查查詢的基本表、視圖等是否存在,如果存在,則從DD中取出視圖的定義,把定義中的子查詢和用戶的查詢結(jié)合起來,轉(zhuǎn)換成等價的對基本表的查詢,然后再執(zhí)行修正了的查詢。

14三月2024通過視圖查詢數(shù)據(jù)同通過基本表查詢數(shù)據(jù)一樣。首先把對視圖的查詢轉(zhuǎn)換成等價的對基本表的查詢。然后再執(zhí)行轉(zhuǎn)換后的查詢。14三月2024示例1例利用IS_Student視圖,查詢信息系年齡小于20歲的學(xué)生。SELECTSno,Sname,SageFROMIS_StudentWHERESage<20轉(zhuǎn)換成的實際查詢?yōu)椋篠ELECTSno,Sname,SageFROMStudentWHERESdept='信息系'ANDSage<20

14三月2024示例2例利用IS_Student視圖,查詢信息系選修了‘C01’課程的學(xué)生的學(xué)號和姓名。SELECTSno,Sname,SageFROMIS_StudentJOINSCONIS.Student.Sno=SC.SnoWHERECno='C01'14三月2024示例3例利用S_G視圖,查詢平均成績90分以上的學(xué)生的學(xué)號和平均成績。

SELECT*FROMS_GWHEREAverageGrade>90轉(zhuǎn)換語句是:SELECTSno,AVG(Grade)FROMSC GROUPBYSnoHAVINGAVG(Grade)>90

14三月20245.視圖的更新是指通過視圖來插入、刪除和修改數(shù)據(jù)。因視圖是虛表,故對視圖的更新,最終要轉(zhuǎn)化為對基本表的更新。為防止用戶通過視圖進行更新數(shù)據(jù),有意或無意對不屬于視圖范圍內(nèi)的基本表數(shù)據(jù)進行操作,可在定義視圖時加上[WITHCHECKOPTION]子句。在視圖上更新數(shù)據(jù)時,DBMS檢查視圖定義中的條件,若不滿足條件,則拒絕執(zhí)行更新操作。

14三月20246.視圖的撤消語句格式:DROPVIEW<視圖名>功能:從DB中刪除指定的視圖。說明:⑴DROPVIEW是刪除視圖在DD中的定義信息,而由該視圖導(dǎo)出的其他視圖的定義卻仍存在DD中,但這些視圖已失效;⑵視圖創(chuàng)建后,若導(dǎo)出此視圖的基本表被刪除了,則該視圖將失效(一般不會被自動刪除),用DROPVIEW語句將其刪除。

14三月20243.8數(shù)據(jù)控制語言3.8.1

數(shù)據(jù)控制方法3.8.2

數(shù)據(jù)控制語句3.8.3

事務(wù)控制語句

14三月20243.8.1數(shù)據(jù)控制方法1.DB操作權(quán)限2.數(shù)據(jù)控制方法

14三月20241.DB操作權(quán)限⑴隱含特權(quán):系統(tǒng)內(nèi)置權(quán)限,是用戶不需要進行授權(quán)就可擁有的數(shù)據(jù)操作權(quán)。⑵系統(tǒng)特權(quán)(語句特權(quán)):相當(dāng)于數(shù)據(jù)定義語言的語句權(quán)限。是允許用戶在DB內(nèi)部實施管理行為的特權(quán),它主要包括創(chuàng)建或刪除DB、創(chuàng)建或刪除用戶、刪除或修改DB對象等。⑶對象特權(quán):類似于DB操作語言的語句權(quán)限,它指用戶對DB中的表、視圖、存儲過程等對象的操作權(quán)限。

14三月20242.數(shù)據(jù)控制方法DBMS實現(xiàn)數(shù)據(jù)控制的步驟:⑴授權(quán)定義。首先由具有授權(quán)資格的DBA和DB對象的所有者進行授權(quán)定義,即通過數(shù)據(jù)控制語言DCL,將授權(quán)決定告知DBMS。⑵存權(quán)處理。DBMS把授權(quán)的結(jié)果編譯后存入DD中。DD是由系統(tǒng)自動生成、維護的DB,由一組表組成,其中記錄著用戶標(biāo)識、基本表、視圖和各表的屬性描述及系統(tǒng)授權(quán)情況。⑶查權(quán)操作。當(dāng)用戶提出操作請求時,系統(tǒng)在DD中查找該用戶的數(shù)據(jù)操作權(quán)限,當(dāng)用戶擁有該操作權(quán)時才能執(zhí)行其操作,否則系統(tǒng)拒絕。

14三月20243.8.2數(shù)據(jù)控制語句1.授予權(quán)限2.撤消權(quán)限3.拒絕訪問

14三月20241.授予權(quán)限語句格式:

GRANT<權(quán)限>[,<權(quán)限>,…]

[ON<對象類型><對象名>]

TO<用戶>[,<用戶>,…]|PCBLIC

[WITHGRANTOPTION];功能:將對指定操作對象的指定操作權(quán)限授予指定的用戶。

14三月2024說明:⑴不同類

溫馨提示

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

評論

0/150

提交評論