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