數(shù)據(jù)庫技術(shù)及應(yīng)用課件第4章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言.ppt
第4章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL,4.1SQL概述及特點(diǎn)4.2SQL的數(shù)據(jù)定義功能4.3SQL的數(shù)據(jù)查詢功能4.4SQL的數(shù)據(jù)更新功能4.5嵌入式SQL4.6SQL的數(shù)據(jù)控制功能習(xí)題4,4.1SQL概述及特點(diǎn),SQL是一種介于關(guān)系代數(shù)與關(guān)系演算之間的結(jié)構(gòu)化查詢語言,其功能并不僅僅是查詢。SQL語言是一個通用的、功能極強(qiáng)的關(guān)系數(shù)據(jù)庫語言。,1.SQL的主要功能SQL的功能可以分為三類:(1)數(shù)據(jù)定義功能。(2)數(shù)據(jù)操縱功能。(3)數(shù)據(jù)控制功能。,2.SQL的特點(diǎn)SQL語言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體,它除了具有一般關(guān)系數(shù)據(jù)庫語言的特點(diǎn)外,還具有以下三個特點(diǎn):(1)SQL具有自主式和嵌入式兩種形式。(2)SQL具有語言簡潔、易學(xué)易用的特點(diǎn)。(3)SQL支持三級數(shù)據(jù)模式結(jié)構(gòu)。,表4-1SQL的命令動詞,圖4-1SQL對關(guān)系數(shù)據(jù)庫模式的支持,4.2SQL的數(shù)據(jù)定義功能,SQL的數(shù)據(jù)定義包括定義基本表、索引、視圖和數(shù)據(jù)庫,其基本語句如表4-2所示。,表4-2SQL的數(shù)據(jù)定義語句,1.語句格式的約定符號在語句格式中:尖括號“”實際語義。中括號“”中的內(nèi)容任選項。大括號“”或用分隔符“|”中的內(nèi)容必選項,即必選其中之一項。,n表示前面的項可重復(fù)多次。,2.一般語法規(guī)定SQL中的數(shù)據(jù)項(包括列項、表和視圖)分隔符為“,”,其字符串常數(shù)的定界符用單引號“”表示。3.SQL的特殊語法規(guī)定SQL的關(guān)鍵詞一般使用大寫字母表示。SQL語句的結(jié)束符為“;”。SQL一般應(yīng)采用格式化書寫方式。,4.2.1基本表的定義和維護(hù)功能SQL的基本表定義和維護(hù)功能使用基本表的定義、修改和刪除三種語句實現(xiàn)。1.定義基本表SQL語言使用CREATETABLE語句定義基本表,定義基本表語句的一般格式為,CREATETABLE庫名表名(列名數(shù)據(jù)類型列級完整性約束條件,列名數(shù)據(jù)類型列級完整性約束條件,n,表級完整性約束條件,n);,(1)SQL支持的數(shù)據(jù)類型。不同的數(shù)據(jù)庫系統(tǒng)支持的數(shù)據(jù)類型不完全相同。IBMDB2SQL支持的數(shù)據(jù)類型由表4-3列出,其中,使用最多的是字符型數(shù)據(jù)和數(shù)值型數(shù)據(jù)。,表4-3IBMDB2SQL支持的主要數(shù)據(jù)類型,(2)列級完整性的約束條件。列級完整性約束是針對屬性值設(shè)置的限制條件。SQL的列級完整性條件有以下幾種:NOTNULL或NULL約束。UNIQUE約束。DEFAULT約束。CHECK約束。,(3)表級完整性約束條件。表級完整性約束條件是指涉及到關(guān)系中多個列的限制條件。在上述的CHECK約束中,如果約束條件表達(dá)式中涉及到多列數(shù)據(jù),它便為表級約束。,【例4-1】用SQL建立學(xué)生_課程庫中的基本表,其表結(jié)構(gòu)為學(xué)生(學(xué)號,姓名,年齡,性別,所在系)課程(課程號,課程名,先行課)選課(學(xué)號,課程號,成績),2.修改基本表當(dāng)已建立好的基本表隨著應(yīng)用環(huán)境和應(yīng)用需求的變化而需要修改時,需要利用SQL的修改基本表語句修改表結(jié)構(gòu)。SQL語言用ALTERTABLE語句來修改基本表,其一般格式為ALTERTABLE表名ADD(新列名數(shù)據(jù)類型完整性約束,n)DROP完整性約束名MODIFY(列名數(shù)據(jù)類型,n);,(1)使用ADD子句增加新列。當(dāng)需要向表中增加新列和新的完整性約束時,使用ADD字句對表結(jié)構(gòu)進(jìn)行修改操作。【例4-2】向課程表中增加“學(xué)時”字段。ALTERTABLE課程ADD學(xué)時SMALLINT;(2)使用MODIFY子句修改列的原定義。(3)使用DROP子句刪除指定的完整性約束條件?!纠?-3】刪除學(xué)生表中對“年齡”的默認(rèn)值的定義。,3.刪除基本表當(dāng)不再需要某個基本表時,使用DROPTABLE語句刪除它,其一般格式為DROPTABLE表名;基本表一旦被刪除,表中的數(shù)據(jù)及在此表基礎(chǔ)上建立的索引、視圖將自動地全部被刪除掉。因此,執(zhí)行刪除基本表的操作時一定要格外小心。,4.2.2索引的定義和維護(hù)功能1.索引的作用使用索引有以下三方面的作用:(1)可以明顯地加快數(shù)據(jù)查詢的速度。(2)可保證數(shù)據(jù)的惟一性。(3)可以加快連接速度。,2.建立索引的原則建立索引是加快數(shù)據(jù)查詢的有效手段,在建立索引時,用戶應(yīng)當(dāng)依照以下原則:(1)索引的建立和維護(hù)由DBA和DBMS完成。(2)大表應(yīng)當(dāng)建索引,小表則不必建索引。(3)對于一個基本表,不要建立過多的索引。(4)根據(jù)查詢要求建索引。,3.建立索引的格式在SQL語言中,建立索引使用CREATEINDEX語句,其一般格式為CREATEUNIQUECLUSTERINDEX索引名ON表名(列名次序,列名次序);,【例4-4】為學(xué)生課程數(shù)據(jù)庫中的學(xué)生、課程和選課三個表建立索引。其中,學(xué)生表按“學(xué)號”升序建立索引;課程表按“課程號”升序建立惟一索引;選課表按“學(xué)號”升序和“課程號”降序建立惟一索引。CREATEUNIQUEINDEX學(xué)號ON學(xué)生(學(xué)號);CREATEUNIQUEINDEX課程號ON課程(課程號);CREATEUNIQUEINDEX選課號ON選課(學(xué)號ASC,課程號DESC);,4.刪除索引索引一經(jīng)建立,就由系統(tǒng)來選擇和維護(hù),無須用戶干預(yù)。建立索引是為了減少查詢操作的時間,但如果數(shù)據(jù)增、刪、改頻繁,系統(tǒng)就會花費(fèi)大量的時間來維護(hù)索引,這樣就得不償失了,因此,有時需要刪除一些不必要的索引。SQL語言使用DROPINDEX語句刪除索引,其一般格式為DROPINDEX索引名;,【例4-5】刪除學(xué)生表的學(xué)生姓名索引。DROPINDEX學(xué)生姓名;刪除索引時,系統(tǒng)會同時從數(shù)據(jù)字典中刪去有關(guān)對該索引的描述。,4.2.3視圖的定義和維護(hù)功能視圖是根據(jù)子模式設(shè)計的關(guān)系,它是由一個或幾個基本表(或已定義的視圖)導(dǎo)出的虛表。1.視圖的優(yōu)點(diǎn)合理地使用視圖能夠?qū)ο到y(tǒng)的設(shè)計和用戶的使用帶來很多方便。(1)視圖能夠簡化用戶的操作。(2)視圖機(jī)制可以使用戶以不同的方式看待同一數(shù)據(jù)。(3)視圖對數(shù)據(jù)庫的重構(gòu)提供了一定程度的邏輯獨(dú)立性。(4)視圖可以對機(jī)密的數(shù)據(jù)提供安全保護(hù)。,2.視圖定義的格式SQL語言用CREATEVIEW來定義視圖,其一般格式為CREATEVIEW視圖名(列名組)AS子查詢WITHCHECKOPTION;,【例4-6】建立計算機(jī)系學(xué)生的視圖。CREATEVIEW計算機(jī)系學(xué)生ASSELECT學(xué)號,姓名,年齡FROM學(xué)生WHERE所在系=計算機(jī)系;例4-6中的視圖是由一個基本表構(gòu)造出的。,【例4-7】由學(xué)生、課程和選課三個表,定義一個計算機(jī)系的學(xué)生成績視圖,其屬性包括學(xué)號、姓名、課程名和成績?!纠?-8】將學(xué)生的學(xué)號、總成績、平均成績定義成一個視圖。,3.視圖的刪除視圖刪除語句的一般格式為DROPVIEW視圖名;視圖刪除后,視圖的定義將從數(shù)據(jù)字典中刪除,而由該視圖導(dǎo)出的其他視圖的定義卻仍存在于數(shù)據(jù)字典中,但這些視圖已失效。,4.視圖的查詢和維護(hù)視圖可以和基本表一樣被查詢,其使用方法與基本表相同,但利用視圖進(jìn)行數(shù)據(jù)增、刪、改操作,會受到一定的限制。,4.3SQL的數(shù)據(jù)查詢功能,4.3.1SELECT語句介紹SQL的數(shù)據(jù)查詢語句中包括SELECT、FROM、WHERE、GROUPBY和ORDERBY子句。SELECT語句具有數(shù)據(jù)查詢、統(tǒng)計、分組和排序的功能,其語句表達(dá)能力非常強(qiáng)大。,1.SELECT語句的語法SELECT語句的語法格式為SELECT目標(biāo)列組FROM數(shù)據(jù)源WHERE元組選擇條件GROUPBY分列組HAVING組選擇條件ORDERBY排序列1排序要求1,n;,(1)SELECT子句。(2)FROM子句。(3)WHERE子句。(4)GROUPBY子句。(5)ORDERBY子句。,2.SELECT語句的操作符(1)算術(shù)操作符。算術(shù)操作符在SQL語句中表達(dá)數(shù)學(xué)運(yùn)算操作。SQL的數(shù)學(xué)運(yùn)算操作符只有四種,它們是:+(加號)、(減號)、*(乘號)和/(除號)。,(2)比較操作符。比較操作符用于測試兩個數(shù)據(jù)是否相等、不等、小于或大于某個值。SQL中的比較操作符包括:=(等于)、>(大于)、=(大于等于)、!=或(不等于)、!>(不大于)和!、=、<=和!=。,當(dāng)連接運(yùn)算符為“=”時,該連接操作稱為等值連接;否則,使用其他運(yùn)算符的連接運(yùn)算稱為非等值連接。當(dāng)?shù)戎颠B接中的連接字段相同,并且在SELECT子句中去除了重復(fù)字段時,則該連接操作為自然連接。,【例4-15】查詢每個學(xué)生的情況以及他(她)所選修的課程?!纠?-16】求學(xué)生的學(xué)號、姓名、選修的課程名及成績。【例4-17】求選修C1課程且成績?yōu)?0分以上的學(xué)生學(xué)號、姓名及成績。,(2)自連接操作。連接操作不只是在兩個表之間進(jìn)行,一個表內(nèi)還可以進(jìn)行自身連接操作。表自身的連接操作稱為自連接?!纠?-18】查詢每一門課的間接先行課(即先行課的先行課)。,表4-5課程表中的數(shù)據(jù),表4-6課程表自連接操作,(3)外部連接操作。在前面連接示例的結(jié)果集中只保留了符合連接條件的元組,而排除了兩個表中沒有對應(yīng)的或匹配的元組情況,這種連接稱為內(nèi)連接。如果要求查詢結(jié)果集中保留非匹配的元組,就要執(zhí)行外部連接操作。,表4-7職工和部門表數(shù)據(jù),【例4-19】用SQL表達(dá)職工和部門的內(nèi)連接、左外部連接和右外部連接的語句分別如下:內(nèi)連接:SELECT職工.*,部門名稱,電話FROM職工,部門WHERE職工.所在部門=部門.部門號;,左外部連接:SELECT職工.*,部門名稱,電話FROM職工,部門WHERE職工.所在部門*=部門.部門號;右外部連接:SELECT職工.*,部門名稱,電話FROM職工,部門WHERE職工.所在部門=*部門.部門號;,表4-8職工和部門表各種連接的結(jié)果集對照表,3.嵌套查詢在SQL語言中,一個SELECTFROMWHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢。(1)使用IN操作符的嵌套查詢。當(dāng)IN操作符后的數(shù)據(jù)集需要通過查詢得到時,就需要使用IN嵌套查詢?!纠?-20】求選修了高等數(shù)學(xué)的學(xué)生學(xué)號和姓名。,(2)使用比較符的嵌套查詢。IN操作符用于一個值與多值比較,而比較符則用于一個值與另一個值之間的比較。當(dāng)比較符后面的值需要通過查詢才能得到時,就需要使用比較符嵌套查詢?!纠?-21】求C1課程的成績高于張三的學(xué)生學(xué)號和成績。(3)使用ANY或ALL操作符的嵌套查詢。,表4-9ANY和ALL與比較符結(jié)合的操作符及其語意表,【例4-22】求其他系中比計算機(jī)系某一學(xué)生年齡小的學(xué)生(即求年齡小于計算機(jī)系年齡最大者的學(xué)生)。【例4-23】求其他系中比計算機(jī)系學(xué)生年齡都小的學(xué)生。,(4)使用EXISTS操作符的嵌套查詢?!纠?-24】求選修了C2課程的學(xué)生姓名?!纠?-25】求沒有選修C2課程的學(xué)生姓名。【例4-26】查詢選修了全部課程的學(xué)生的姓名。【例4-27】求至少選修了學(xué)號為“S2”的學(xué)生所選修的全部課程的學(xué)生學(xué)號和姓名。,4.組合查詢將SELECT語句的查詢結(jié)果集再進(jìn)行集合運(yùn)算就構(gòu)成了SQL的組合查詢。SQL的組合查詢操作符有UNION(并操作)、INTERSECT(交操作)和MINUS(差操作)三種?!纠?-28】求選修了C1課程或選修了C2課程的學(xué)生學(xué)號?!纠?-29】求選修C1課程,并且也選修C2課程的學(xué)生學(xué)號。,【例4-30】求選修了C1課程但沒有選修C2課程的學(xué)生學(xué)號。,表4-10基本的SQL函數(shù),5.使用分組和SQL函數(shù)查詢SQL函數(shù)是綜合信息的統(tǒng)計函數(shù),包括計數(shù)、求最大值、求最小值、求平均值、求和值等。SQL函數(shù)可作為列標(biāo)識符出現(xiàn)在SELECT子句的目標(biāo)列或HAVING子句的條件中?!纠?-31】求學(xué)生的總?cè)藬?shù)?!纠?-32】求選修了課程的學(xué)生人數(shù)?!纠?-33】求課程和選修該課程的人數(shù)?!纠?-34】求選修課超過三門課的學(xué)生學(xué)號。,4.4SQL的數(shù)據(jù)更新功能,4.4.1SQL的數(shù)據(jù)插入功能SQL的數(shù)據(jù)插入語句有兩種使用形式:一種是使用常量,一次插入一個元組;另一種是插入子查詢的結(jié)果,一次插入多個元組。,1.使用常量插入單個元組使用常量插入單個元組的INSERT語句的格式為INSERTINTO表名(屬性列1,屬性列2)VALUES(常量1,常量2);,【例4-35】將一個新學(xué)生記錄(學(xué)號:03010,姓名:張三,年齡:20,所在系:計算機(jī)系)插入到學(xué)生表中?!纠?-36】插入一條選課記錄(學(xué)號:03011,課程號:C10,成績不詳)。,2.在表中插入子查詢的結(jié)果集如果插入的數(shù)據(jù)需要查詢才能得到,就需要使用插入子查詢結(jié)果集的INSERT語句。SQL允許將查詢語句嵌到數(shù)據(jù)插入語句中,以便將查詢得到的結(jié)果集作為批量數(shù)據(jù)輸入到表中。含有子查詢的INSERT語句的格式為INSERTINTO表名(屬性列1,屬性列2)子查詢;【例4-37】求每個系學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫中。,4.4.2SQL的數(shù)據(jù)修改功能SQL修改數(shù)據(jù)操作語句的一般格式為UPDATE表名SET列名=表達(dá)式,列名=表達(dá)式,nWHERE條件;,【例4-38】將學(xué)生表中全部學(xué)生的年齡加上2歲?!纠?-39】將選課表中的數(shù)據(jù)庫課程的成績乘以1.2。,4.4.3SQL的數(shù)據(jù)刪除功能數(shù)據(jù)刪除語句的一般格式為DELETEFROM表名WHERE條件;DELETE語句的功能是從指定表中刪除滿足WHERE子句條件的所有元組。【例4-40】刪除管理系的學(xué)生記錄及選課記錄。,4.5嵌入式SQL,4.5.1嵌入式SQL的特點(diǎn)SQL的功能只包括數(shù)據(jù)定義功能DDL、數(shù)據(jù)操縱功能DML和數(shù)據(jù)控制功能DCL,而缺少程序設(shè)計必要的程序流程控制和交互式功能,也缺少一些專業(yè)應(yīng)用的功能,例如SQL沒有分支、循環(huán)、賦值等語句等。,1.區(qū)別SQL和主語言在嵌入式SQL中,為了能夠區(qū)分SQL語句與主語言語句,必須在所有的SQL語句前面加上前綴EXECSQL。SQL語句的結(jié)束標(biāo)志則隨主語言的不同而不同。,2.使數(shù)據(jù)庫的工作單元與程序工作單元之間能夠通信在含有嵌入式SQL的應(yīng)用程序中,SQL語句負(fù)責(zé)管理數(shù)據(jù)庫,主語言語句負(fù)責(zé)控制程序流程和其他功能。數(shù)據(jù)庫的工作單元和程序工作單元之間通信的主要方式有以下兩種:(1)主語言通過主變量向SQL語句提供參數(shù)。(2)SQL語句的當(dāng)前工作狀態(tài)和運(yùn)行環(huán)境數(shù)據(jù)要反饋給應(yīng)用程序。,3.使用游標(biāo)解決SQL一次一集合的操作與主語言一次一記錄操作的矛盾SQL語言與主語言具有不同的數(shù)據(jù)處理方式。,4.5.2不用游標(biāo)的SQL語句1.幾種不需要使用游標(biāo)的SQL語句下面四種SQL語句不需要使用游標(biāo):(1)用于說明主變量的說明性語句。(2)數(shù)據(jù)定義和數(shù)據(jù)控制語句。(3)查詢結(jié)果為單記錄的查詢語句。(4)數(shù)據(jù)的插入語句和某些數(shù)據(jù)刪除、修改語句。,2.不用游標(biāo)的查詢語句不用游標(biāo)的查詢語句的一般格式為EXECSQLSELECTALL|DISTINCT目標(biāo)列表達(dá)式,nINTO主變量指示變量,nFROM表名或視圖名,nWHERE條件表達(dá)式;,【例4-41】查詢學(xué)號為主變量givesno的值、課號為主變量givecno的值的學(xué)生選課記錄。,3.不用游標(biāo)的數(shù)據(jù)維護(hù)語句(1)不用游標(biāo)的數(shù)據(jù)刪除語句。在刪除語句中,WHERE子句的條件中可以使用主變量?!纠?-42】刪除學(xué)號由主變量Sno決定的學(xué)生記錄?!纠?-43】將計算機(jī)系所有學(xué)生的年齡都加上主變量Raise?!纠?-44】將計算機(jī)系學(xué)生的年齡置空。,(3)不用游標(biāo)的數(shù)據(jù)插入語句。INSERT語句的VALUES子句可以使用主變量和指示變量,當(dāng)需要插入空值時,可以把指示變量置為負(fù)值?!纠?-45】將學(xué)號由主變量Sno、課程號由Cno決定的選課記錄插入到數(shù)據(jù)庫中。,4.5.3使用游標(biāo)的SQL游標(biāo)機(jī)制用于解決SQL查詢結(jié)果為集合而主語言處理方式為記錄方式的矛盾。在處理中,必須使用游標(biāo)的SQL語句有兩種:一種是查詢結(jié)果為多條記錄的SELECT語句;另一種是使用游標(biāo)的DELETE語句和UPDATE語句。,1.定義游標(biāo)命令游標(biāo)通過DECLARE語句定義,其語句格式為EXECSQLDECLARE游標(biāo)名CURSORFOR子查詢FORUPDATEOF字段名1,n;【例4-46】定義按主變量DEPT查詢系里學(xué)生的游標(biāo)。,2.打開游標(biāo)命令游標(biāo)通過OPEN命令打開,打開游標(biāo)語句的格式為EXECSQLOPEN游標(biāo)名;OPEN語句的作用是執(zhí)行游標(biāo)對應(yīng)的查詢語句,并將游標(biāo)指向結(jié)果集的第一條記錄前?!纠?-47】打開SX游標(biāo)。,3.推進(jìn)游標(biāo)命令游標(biāo)通過FETCH命令向前(或稱向下)推進(jìn)一條記錄。推進(jìn)游標(biāo)的語句格式為EXECSQLFETCH游標(biāo)名INTO主變量組;推進(jìn)游標(biāo)的作用是將游標(biāo)下移一行,讀出當(dāng)前的記錄,將當(dāng)前記錄的各數(shù)據(jù)項值放到INTO后的主變量組中?!纠?-48】將打開的指向系的游標(biāo)向前推進(jìn)。,4.關(guān)閉游標(biāo)命令由于許多系統(tǒng)允許打開的游標(biāo)數(shù)有一定的限制,所以當(dāng)數(shù)據(jù)處理完后應(yīng)及時把不使用的游標(biāo)關(guān)閉,以釋放結(jié)果集占用的緩沖區(qū)及其他資源。關(guān)閉游標(biāo)使用CLOSE命令,CLOSE命令的具體格式為EXECSQLCLOSE游標(biāo)名;,4.6SQL的數(shù)據(jù)控制功能,4.6.1數(shù)據(jù)控制的方法數(shù)據(jù)庫系統(tǒng)通過以下三步來實現(xiàn)數(shù)據(jù)控制。1.授權(quán)定義具有授權(quán)資格的用戶,如數(shù)據(jù)庫管理員DBA或建表戶DBO,通過數(shù)據(jù)控制語言DCL,將授權(quán)決定告知數(shù)據(jù)庫管理系統(tǒng)。,2.存權(quán)處理數(shù)據(jù)庫管理系統(tǒng)DBMS把授權(quán)的結(jié)果編譯后存入數(shù)據(jù)字典中。3.查權(quán)操作當(dāng)用戶提出操作請求時,系統(tǒng)首先要在數(shù)據(jù)字典中查找該用戶的數(shù)據(jù)操作權(quán)限,當(dāng)用戶擁有該操作權(quán)時才能執(zhí)行其操作,否則系統(tǒng)將拒絕其操作。,4.6.2SQLServer的數(shù)據(jù)庫操作權(quán)限1.隱含特權(quán)隱含特權(quán)是系統(tǒng)內(nèi)置權(quán)限,是用戶不需要進(jìn)行授權(quán)就可擁有的數(shù)據(jù)操作權(quán)。2.系統(tǒng)特權(quán)系統(tǒng)特權(quán)又稱為語句特權(quán),它相當(dāng)于數(shù)據(jù)定義語句DLL的語句權(quán)限。不同的數(shù)據(jù)庫系統(tǒng)規(guī)定的系統(tǒng)權(quán)限不同,SQLServer中的系統(tǒng)特權(quán)如表4-11所示。,表4-11SQLServer中的系統(tǒng)特權(quán),3.對象特權(quán)對象特權(quán)類似于數(shù)據(jù)庫操作語言DML的語句權(quán)限,它指用戶對數(shù)據(jù)庫中的表、視圖、存儲過程等對象的操作權(quán)限。SQLServer中的對象特權(quán)如表4-12所示。,表4-12SQLServer中的對象特權(quán),4.6.3數(shù)據(jù)操作權(quán)限的設(shè)置數(shù)據(jù)操作權(quán)限的設(shè)置語句包括授權(quán)語句、收權(quán)語句和拒絕訪問語句三種。1.授權(quán)語句系統(tǒng)授權(quán)的授權(quán)語句格式為GRANT系統(tǒng)特權(quán)組To用戶組|PUBLICWITHGRANTOPTION;,【例4-49】把修改學(xué)生學(xué)號和查詢學(xué)生表的權(quán)力授予用戶王平。【例4-50】把建立數(shù)據(jù)庫和備份數(shù)據(jù)庫的權(quán)力賦給用戶王平。,2.收權(quán)語句數(shù)據(jù)庫管理員DBA、數(shù)據(jù)庫擁有者(建庫戶)DBO或數(shù)據(jù)庫對象擁有者DBOO(數(shù)據(jù)庫對象主要是基本表)可以通過REVOKE語句將其他用戶的數(shù)據(jù)操作權(quán)收回。REVOKE語句的一般格式為REVOKE權(quán)限組|ALLPRIVILIGESON對象名FROM用戶名組|PUBLIC;【例4-51】將用戶王平的可以在學(xué)生表中修改學(xué)生學(xué)號的權(quán)利收回。,3.拒絕訪問語句拒絕訪問語句的一般格式為DENYALLPRIVILIGES|權(quán)限組ON對象名TO用戶組|PUBLIC;其中,ON子句用于說明對象特權(quán)的對象名;對象名指的是表名、視圖名、視圖和表的字段名或者過程名。,習(xí)題4,4.1試述SQL語言的特點(diǎn)。4.2在嵌入式SQL中,如何區(qū)分SQL語句和主語言語句?4.3SQL語言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體,語句INSERT、DELETE、UPDATE實現(xiàn)_功能。A.數(shù)據(jù)查詢B.數(shù)據(jù)操縱C.數(shù)據(jù)定義D.數(shù)據(jù)控制,4.4下面列出的關(guān)于視圖(VIEW)的條目中,不正確的是_。A.視圖是外模式B.視圖是虛表C.使用視圖可以加快查詢語句的執(zhí)行速度D.使用視圖可以簡化查詢語句的編寫4.5在SQL語言的SELECT語句中,實現(xiàn)投影操作的是_子句。A.SELECTB.FROMC.WHERED.GROUPBY,4.6SQL語言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體,語句ALTERTABLE實現(xiàn)_功能。A.數(shù)據(jù)查詢B.數(shù)據(jù)操縱C.數(shù)據(jù)定義D.數(shù)據(jù)控制4.7在關(guān)系數(shù)據(jù)庫系統(tǒng)中,為了簡化用戶的查詢操作,而又不增加數(shù)據(jù)的存儲空間,常用的方法是創(chuàng)建_。A.另一個表B.游標(biāo)C.視圖D.索引,4.8設(shè)職工_社團(tuán)數(shù)據(jù)庫有三個基本表:職工(職工號,姓名,年齡,性別)社會團(tuán)體(編號,名稱,負(fù)責(zé)人,活動地點(diǎn))參加(職工號,編號,參加日期)其中:職工表的主碼為“職工號”。,社會團(tuán)體表的主碼為“編號”;外碼為“負(fù)責(zé)人”,被參照表為職工表,對應(yīng)屬性為“職工號”。參加表的“職工號”和“編號”為主碼;“職工號”為外碼,其被參照表為職工表,對應(yīng)屬性為“職工號”;“編號”為外碼,其被參照表為社會團(tuán)體表,對應(yīng)屬性為“編號”。,試用SQL語句表達(dá)下列操作:(1)定義職工表、社會團(tuán)體表和參加表,并說明其主碼和參照關(guān)系。(2)建立下列兩個視圖:社團(tuán)負(fù)責(zé)人(編號,名稱,負(fù)責(zé)人職工號,負(fù)責(zé)人姓名,負(fù)責(zé)人性別)參加人情況(職工號,姓名,社團(tuán)編號,社團(tuán)名稱,參加日期),(3)查找參加唱歌隊或籃球隊的職工號和姓名。(4)查找沒有參加任何社會團(tuán)體的職工情況。(5)查找參加了全部社會團(tuán)體的職工情況。(6)查找參加了職工號為“1001”的職工所參加的全部社會團(tuán)體的職工號。(7)求每個社會團(tuán)體的參加人數(shù)。(8)求參加人數(shù)最多的社會團(tuán)體的名稱和參加人數(shù)。,(9)求參加人數(shù)超過100人的社會團(tuán)體的名稱和負(fù)責(zé)人。(10)把對社會團(tuán)體和參加兩個表的數(shù)據(jù)查看、插入和刪除數(shù)據(jù)的權(quán)力賦給用戶李平,并允許他再將此權(quán)力授予其他用戶。,4.9設(shè)工程_零件數(shù)據(jù)庫中有四個基本表:供應(yīng)商(供應(yīng)商代碼,姓名,所在城市,聯(lián)系電話)工程(工程代碼,工程名,負(fù)責(zé)人,預(yù)算)零件(零件代碼,零件名,規(guī)格,產(chǎn)地,顏色)供應(yīng)零件(供應(yīng)商代碼,工程代碼,零件代碼,數(shù)量)試用SQL語句完成下列操作:,(1)找出天津市供應(yīng)商的姓名和電話。(2)查找預(yù)算在50000100000元之間的工程的信息,并將結(jié)果按預(yù)算降序排列。(3)找出使用供應(yīng)商S1所供零件的工程號碼。(4)找出工程項目J2使用的各種零件名稱及其數(shù)量。(5)找出上海廠商供應(yīng)的所有零件號碼。(6)找出使用上海產(chǎn)的零件的工程名稱。,(7)找出沒有使用天津產(chǎn)零件的工程號碼。(8)把全部紅色零件的顏色改成藍(lán)色。(9)將由供應(yīng)商S5供給工程代碼為J4的零件P6改為由S3供應(yīng),并作其他必要的修改。(10)從供應(yīng)商關(guān)系中刪除S2的記錄,并從供應(yīng)零件關(guān)系中刪除相應(yīng)的記錄。,4.10關(guān)系數(shù)據(jù)模型如下:學(xué)生S(SNO,SN,SEX,AGE)課程C(CNO,CN,PCNO)PCNO為直接先行課號選課SC(SNO,CNO,GR)GR為課程考試成績試用SQL寫出查詢程序:(1)將選修課程“DB”的學(xué)生學(xué)號SNO、姓名SN建立視圖SDB。(2)查詢選修課程“DB”的學(xué)生姓名SN。,