已閱讀5頁,還剩102頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL,4.1 SQL概述及特點(diǎn) 4.2 SQL的數(shù)據(jù)定義功能 4.3 SQL的數(shù)據(jù)查詢功能 4.4 SQL的數(shù)據(jù)更新功能 4.5 嵌入式SQL 4.6 SQL的數(shù)據(jù)控制功能 習(xí)題4,4.1 SQL概述及特點(diǎn),SQL是一種介于關(guān)系代數(shù)與關(guān)系演算之間的結(jié)構(gòu)化查詢語言,其功能并不僅僅是查詢。SQL語言是一個(gè)通用的、功能極強(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)外,還具有以下三個(gè)特點(diǎn): (1) SQL具有自主式和嵌入式兩種形式。 (2) SQL具有語言簡潔、易學(xué)易用的特點(diǎn)。 (3) SQL支持三級(jí)數(shù)據(jù)模式結(jié)構(gòu)。,表4-1 SQL的命令動(dòng)詞,圖4-1 SQL對(duì)關(guān)系數(shù)據(jù)庫模式的支持,4.2 SQL的數(shù)據(jù)定義功能,SQL的數(shù)據(jù)定義包括定義基本表、索引、視圖和數(shù)據(jù)庫,其基本語句如表4-2所示。,表4-2 SQL的數(shù)據(jù)定義語句,1. 語句格式的約定符號(hào) 在語句格式中: 尖括號(hào)“”實(shí)際語義。 中括號(hào)“ ”中的內(nèi)容任選項(xiàng)。 大括號(hào)“”或用分隔符“|”中的內(nèi)容必選項(xiàng),即必選其中之一項(xiàng)。 ,n表示前面的項(xiàng)可重復(fù)多次。,2. 一般語法規(guī)定 SQL中的數(shù)據(jù)項(xiàng)(包括列項(xiàng)、表和視圖)分隔符為“,”,其字符串常數(shù)的定界符用單引號(hào)“ ”表示。 3. SQL的特殊語法規(guī)定 SQL的關(guān)鍵詞一般使用大寫字母表示。SQL語句的結(jié)束符為“;”。SQL一般應(yīng)采用格式化書寫方式。,4.2.1 基本表的定義和維護(hù)功能 SQL的基本表定義和維護(hù)功能使用基本表的定義、修改和刪除三種語句實(shí)現(xiàn)。 1. 定義基本表 SQL語言使用CREATE TABLE語句定義基本表,定義基本表語句的一般格式為,CREATE TABLE 庫名表名( 列名數(shù)據(jù)類型列級(jí)完整性約束條件 ,列名數(shù)據(jù)類型列級(jí)完整性約束條件,n ,表級(jí)完整性約束條件,n );,(1) SQL支持的數(shù)據(jù)類型。 不同的數(shù)據(jù)庫系統(tǒng)支持的數(shù)據(jù)類型不完全相同。IBM DB2 SQL支持的數(shù)據(jù)類型由表4-3列出,其中,使用最多的是字符型數(shù)據(jù)和數(shù)值型數(shù)據(jù)。,表4-3 IBM DB2 SQL支持的主要數(shù)據(jù)類型,(2) 列級(jí)完整性的約束條件。 列級(jí)完整性約束是針對(duì)屬性值設(shè)置的限制條件。SQL的列級(jí)完整性條件有以下幾種: NOT NULL或NULL約束。 UNIQUE約束。 DEFAULT約束。 CHECK約束。,(3) 表級(jí)完整性約束條件。 表級(jí)完整性約束條件是指涉及到關(guān)系中多個(gè)列的限制條件。在上述的CHECK約束中,如果約束條件表達(dá)式中涉及到多列數(shù)據(jù),它便為表級(jí)約束。,【例4-1】用SQL建立學(xué)生_課程庫中的基本表,其表結(jié)構(gòu)為 學(xué)生(學(xué)號(hào),姓名,年齡,性別,所在系) 課程(課程號(hào),課程名,先行課) 選課(學(xué)號(hào),課程號(hào),成績),2. 修改基本表 當(dāng)已建立好的基本表隨著應(yīng)用環(huán)境和應(yīng)用需求的變化而需要修改時(shí),需要利用SQL的修改基本表語句修改表結(jié)構(gòu)。SQL語言用ALTER TABLE語句來修改基本表,其一般格式為 ALTER TABLE 表名 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í)”字段。 ALTER TABLE 課程 ADD 學(xué)時(shí) SMALLINT; (2) 使用MODIFY子句修改列的原定義。 (3) 使用DROP子句刪除指定的完整性約束條件。 【例4-3】刪除學(xué)生表中對(duì)“年齡”的默認(rèn)值的定義。,3. 刪除基本表 當(dāng)不再需要某個(gè)基本表時(shí),使用DROP TABLE語句刪除它,其一般格式為 DROP TABLE 表名; 基本表一旦被刪除,表中的數(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è)基本表,不要建立過多的索引。 (4) 根據(jù)查詢要求建索引。,3. 建立索引的格式 在SQL語言中,建立索引使用CREATE INDEX語句,其一般格式為 CREATE UNIQUE CLUSTER INDEX 索引名 ON 表名(列名次序,列名次序);,【例4-4】為學(xué)生課程數(shù)據(jù)庫中的學(xué)生、課程和選課三個(gè)表建立索引。其中,學(xué)生表按“學(xué)號(hào)”升序建立索引;課程表按“課程號(hào)”升序建立惟一索引;選課表按“學(xué)號(hào)”升序和“課程號(hào)”降序建立惟一索引。 CREATE UNIQUE INDEX 學(xué)號(hào)ON 學(xué)生(學(xué)號(hào)); CREATE UNIQUE INDEX 課程號(hào) ON 課程(課程號(hào)); CREATE UNIQUE INDEX 選課號(hào) ON 選課(學(xué)號(hào) ASC,課程號(hào) DESC);,4. 刪除索引 索引一經(jīng)建立,就由系統(tǒng)來選擇和維護(hù),無須用戶干預(yù)。建立索引是為了減少查詢操作的時(shí)間,但如果數(shù)據(jù)增、刪、改頻繁,系統(tǒng)就會(huì)花費(fèi)大量的時(shí)間來維護(hù)索引,這樣就得不償失了,因此,有時(shí)需要?jiǎng)h除一些不必要的索引。 SQL語言使用DROP INDEX語句刪除索引,其一般格式為 DROP INDEX 索引名;,【例4-5】刪除學(xué)生表的學(xué)生姓名索引。 DROP INDEX 學(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ì)和用戶的使用帶來很多方便。 (1) 視圖能夠簡化用戶的操作。 (2) 視圖機(jī)制可以使用戶以不同的方式看待同一數(shù)據(jù)。 (3) 視圖對(duì)數(shù)據(jù)庫的重構(gòu)提供了一定程度的邏輯獨(dú)立性。 (4) 視圖可以對(duì)機(jī)密的數(shù)據(jù)提供安全保護(hù)。,2. 視圖定義的格式 SQL語言用CREATE VIEW 來定義視圖,其一般格式為 CREATE VIEW 視圖名 (列名組) AS 子查詢 WITH CHECK OPTION ;,【例4-6】建立計(jì)算機(jī)系學(xué)生的視圖。 CREATE VIEW 計(jì)算機(jī)系學(xué)生 AS SELECT 學(xué)號(hào),姓名,年齡 FROM 學(xué)生 WHERE 所在系=計(jì)算機(jī)系; 例4-6中的視圖是由一個(gè)基本表構(gòu)造出的。,【例4-7】由學(xué)生、課程和選課三個(gè)表,定義一個(gè)計(jì)算機(jī)系的學(xué)生成績視圖,其屬性包括學(xué)號(hào)、姓名、課程名和成績。 【例4-8】將學(xué)生的學(xué)號(hào)、總成績、平均成績定義成一個(gè)視圖。,3. 視圖的刪除 視圖刪除語句的一般格式為 DROP VIEW 視圖名; 視圖刪除后,視圖的定義將從數(shù)據(jù)字典中刪除,而由該視圖導(dǎo)出的其他視圖的定義卻仍存在于數(shù)據(jù)字典中,但這些視圖已失效。,4. 視圖的查詢和維護(hù) 視圖可以和基本表一樣被查詢,其使用方法與基本表相同,但利用視圖進(jìn)行數(shù)據(jù)增、刪、改操作,會(huì)受到一定的限制。,4.3 SQL的數(shù)據(jù)查詢功能,4.3.1 SELECT語句介紹 SQL的數(shù)據(jù)查詢語句中包括SELECT、FROM、WHERE、GROUP BY和ORDER BY子句。SELECT語句具有數(shù)據(jù)查詢、統(tǒng)計(jì)、分組和排序的功能,其語句表達(dá)能力非常強(qiáng)大。,1. SELECT語句的語法 SELECT語句的語法格式為 SELECT 目標(biāo)列組 FROM 數(shù)據(jù)源 WHERE 元組選擇條件 GROUP BY 分列組 HAVING組選擇條件 ORDER BY 排序列1 排序要求1,n;,(1) SELECT子句。 (2) FROM子句。 (3) WHERE子句。 (4) GROUP BY子句。 (5) ORDER BY子句。,2. SELECT語句的操作符 (1) 算術(shù)操作符。 算術(shù)操作符在SQL語句中表達(dá)數(shù)學(xué)運(yùn)算操作。SQL的數(shù)學(xué)運(yùn)算操作符只有四種,它們是:+(加號(hào))、(減號(hào))、*(乘號(hào))和 /(除號(hào))。,(2) 比較操作符。 比較操作符用于測試兩個(gè)數(shù)據(jù)是否相等、不等、小于或大于某個(gè)值。SQL中的比較操作符包括:=(等于)、(大于)、=(大于等于)、!=或(不等于)、!(不大于)和 !(不小于),共九種操作符。 (3) 邏輯操作符。 SQL的邏輯操作符如表4-4所示。,表4-4 SQL的邏輯操作符,(4) 組合查詢操作符。 組合查詢操作符的使用格式為 查詢1組合操作符查詢2 SQL的組合查詢操作符是針對(duì)傳統(tǒng)關(guān)系運(yùn)算的操作符,它包括UNION、MINUS和INTERSECT三種。 (5) 其他SQL操作符。 其他SQL操作符是針對(duì)SELECT子句中的字段表設(shè)計(jì)的,它用于簡寫結(jié)果集的字段表和對(duì)字段值的限制說明。其他SQL操作符包括 *、ALL和DISTINCT三種。,4.3.2 SQL的查詢實(shí)例 SQL的查詢語句可以分為簡單查詢、連接查詢、嵌套查詢和組合查詢四種類型。下面仍以學(xué)生課程數(shù)據(jù)庫為例,介紹各種查詢的描述格式。 學(xué)生課程數(shù)據(jù)庫包括三個(gè)基本表,其結(jié)構(gòu)為 學(xué)生(學(xué)號(hào),姓名,年齡,所在系) 課程(課程號(hào),課程名,先行課) 選課(學(xué)號(hào),課程號(hào),成績),1. 簡單查詢 簡單查詢是指在查詢過程中只涉及到一個(gè)表的查詢語句。簡單查詢是最基本的查詢語句。 【例4-9】求數(shù)學(xué)系學(xué)生的學(xué)號(hào)和姓名。 【例4-10】求選修了課程的學(xué)生學(xué)號(hào)。 【例4-11】求選修C1課程的學(xué)生學(xué)號(hào)和成績,并要求對(duì)查詢結(jié)果按成績的降序排列,如果成績相同則按學(xué)號(hào)的升序排列。,【例4-12】求選修課程C1且成績在8090之間的學(xué)生學(xué)號(hào)和成績,并將成績乘以系數(shù)0.8輸出。 【例4-13】求數(shù)學(xué)系或計(jì)算機(jī)系姓張的學(xué)生的信息。 【例4-14】求缺少了成績的學(xué)生的學(xué)號(hào)和課程號(hào)。,2. 連接查詢 包含連接操作的查詢語句稱為連接查詢。連接查詢包括等值連接、自然連接、求笛卡兒積、一般連接、外連接、內(nèi)連接、左連接、右連接和自連接等多種。由于連接查詢涉及被連接和連接兩個(gè)表,所以它的源表一般為多表。,(1) 等值連接和非等值連接操作。 連接查詢中,用來連接兩個(gè)表的條件稱為連接條件或連接謂詞。 連接條件的一般格式為 表名1.列名1比較運(yùn)算符表名2.列名2 其中,比較運(yùn)算符主要有:=、=、= 和!=。,當(dāng)連接運(yùn)算符為“=”時(shí),該連接操作稱為等值連接;否則,使用其他運(yùn)算符的連接運(yùn)算稱為非等值連接。 當(dāng)?shù)戎颠B接中的連接字段相同,并且在SELECT子句中去除了重復(fù)字段時(shí),則該連接操作為自然連接。,【例4-15】查詢每個(gè)學(xué)生的情況以及他(她)所選修的課程。 【例4-16】求學(xué)生的學(xué)號(hào)、姓名、選修的課程名及成績。 【例4-17】求選修C1課程且成績?yōu)?0分以上的學(xué)生學(xué)號(hào)、姓名及成績。,(2) 自連接操作。 連接操作不只是在兩個(gè)表之間進(jìn)行,一個(gè)表內(nèi)還可以進(jìn)行自身連接操作。表自身的連接操作稱為自連接。 【例4-18】查詢每一門課的間接先行課(即先行課的先行課)。,表4-5 課程表中的數(shù)據(jù),表4-6 課程表自連接操作,(3) 外部連接操作。 在前面連接示例的結(jié)果集中只保留了符合連接條件的元組,而排除了兩個(gè)表中沒有對(duì)應(yīng)的或匹配的元組情況,這種連接稱為內(nèi)連接。如果要求查詢結(jié)果集中保留非匹配的元組,就要執(zhí)行外部連接操作。,表4-7 職工和部門表數(shù)據(jù),【例4-19】用SQL表達(dá)職工和部門的內(nèi)連接、左外部連接和右外部連接的語句分別如下: 內(nèi)連接: SELECT 職工.*,部門名稱,電話 FROM 職工,部門 WHERE 職工.所在部門= 部門.部門號(hào);,左外部連接: SELECT 職工.*,部門名稱,電話 FROM 職工,部門 WHERE 職工.所在部門*= 部門.部門號(hào); 右外部連接: SELECT 職工.*,部門名稱,電話 FROM 職工,部門 WHERE 職工.所在部門 =* 部門.部門號(hào);,表4-8 職工和部門表各種連接的結(jié)果集對(duì)照表,3. 嵌套查詢 在SQL語言中,一個(gè)SELECTFROMWHERE語句稱為一個(gè)查詢塊。將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢。 (1) 使用IN操作符的嵌套查詢。 當(dāng)IN操作符后的數(shù)據(jù)集需要通過查詢得到時(shí),就需要使用IN嵌套查詢。 【例4-20】求選修了高等數(shù)學(xué)的學(xué)生學(xué)號(hào)和姓名。,(2) 使用比較符的嵌套查詢。 IN操作符用于一個(gè)值與多值比較,而比較符則用于一個(gè)值與另一個(gè)值之間的比較。當(dāng)比較符后面的值需要通過查詢才能得到時(shí),就需要使用比較符嵌套查詢。 【例4-21】求C1課程的成績高于張三的學(xué)生學(xué)號(hào)和成績。 (3) 使用ANY或ALL操作符的嵌套查詢。,表4-9 ANY和ALL與比較符結(jié)合的操作符及其語意表,【例4-22】求其他系中比計(jì)算機(jī)系某一學(xué)生年齡小的學(xué)生(即求年齡小于計(jì)算機(jī)系年齡最大者的學(xué)生)。 【例4-23】求其他系中比計(jì)算機(jī)系學(xué)生年齡都小的學(xué)生。,(4) 使用EXISTS操作符的嵌套查詢。 【例4-24】求選修了C2課程的學(xué)生姓名。 【例4-25】求沒有選修C2課程的學(xué)生姓名。 【例4-26】查詢選修了全部課程的學(xué)生的姓名。 【例4-27】求至少選修了學(xué)號(hào)為“S2”的學(xué)生所選修的全部課程的學(xué)生學(xué)號(hào)和姓名。,4. 組合查詢 將SELECT語句的查詢結(jié)果集再進(jìn)行集合運(yùn)算就構(gòu)成了SQL的組合查詢。SQL的組合查詢操作符有UNION(并操作)、INTERSECT(交操作)和MINUS(差操作)三種。 【例4-28】求選修了C1課程或選修了C2課程的學(xué)生學(xué)號(hào)。 【例4-29】求選修C1課程,并且也選修C2課程的學(xué)生學(xué)號(hào)。,【例4-30】求選修了C1課程但沒有選修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ù)。 【例4-33】求課程和選修該課程的人數(shù)。 【例4-34】求選修課超過三門課的學(xué)生學(xué)號(hào)。,4.4 SQL的數(shù)據(jù)更新功能,4.4.1 SQL的數(shù)據(jù)插入功能 SQL的數(shù)據(jù)插入語句有兩種使用形式:一種是使用常量,一次插入一個(gè)元組;另一種是插入子查詢的結(jié)果,一次插入多個(gè)元組。,1. 使用常量插入單個(gè)元組 使用常量插入單個(gè)元組的INSERT語句的格式為 INSERT INTO 表名(屬性列1,屬性列2) VALUES (常量1,常量2);,【例4-35】將一個(gè)新學(xué)生記錄(學(xué)號(hào):03010,姓名:張三,年齡:20,所在系:計(jì)算機(jī)系 ) 插入到學(xué)生表中。 【例4-36】插入一條選課記錄(學(xué)號(hào):03011,課程號(hào):C10,成績不詳)。,2. 在表中插入子查詢的結(jié)果集 如果插入的數(shù)據(jù)需要查詢才能得到,就需要使用插入子查詢結(jié)果集的INSERT語句。SQL允許將查詢語句嵌到數(shù)據(jù)插入語句中,以便將查詢得到的結(jié)果集作為批量數(shù)據(jù)輸入到表中。含有子查詢的INSERT語句的格式為 INSERT INTO 表名(屬性列1,屬性列2) 子查詢; 【例4-37】求每個(gè)系學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫中。,4.4.2 SQL的數(shù)據(jù)修改功能 SQL修改數(shù)據(jù)操作語句的一般格式為 UPDATE 表名 SET 列名=表達(dá)式,列名=表達(dá)式,n WHERE 條件;,【例4-38】將學(xué)生表中全部學(xué)生的年齡加上2歲。 【例4-39】將選課表中的數(shù)據(jù)庫課程的成績乘以1.2。,4.4.3 SQL的數(shù)據(jù)刪除功能 數(shù)據(jù)刪除語句的一般格式為 DELETE FROM 表名 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è)計(jì)必要的程序流程控制和交互式功能,也缺少一些專業(yè)應(yīng)用的功能,例如SQL沒有分支、循環(huán)、賦值等語句等。,1. 區(qū)別SQL和主語言 在嵌入式SQL中,為了能夠區(qū)分SQL語句與主語言語句,必須在所有的SQL語句前面加上前綴EXEC SQL。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)的查詢語句的一般格式為 EXEC SQL SELECT 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ù)語句 (1) 不用游標(biāo)的數(shù)據(jù)刪除語句。 在刪除語句中,WHERE子句的條件中可以使用主變量。 【例4-42】刪除學(xué)號(hào)由主變量Sno決定的學(xué)生記錄。 【例4-43】將計(jì)算機(jī)系所有學(xué)生的年齡都加上主變量Raise。 【例4-44】將計(jì)算機(jī)系學(xué)生的年齡置空。,(3) 不用游標(biāo)的數(shù)據(jù)插入語句。 INSERT語句的VALUES子句可以使用主變量和指示變量,當(dāng)需要插入空值時(shí),可以把指示變量置為負(fù)值。 【例4-45】將學(xué)號(hào)由主變量Sno、課程號(hào)由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語句定義,其語句格式為 EXEC SQL DECLARE 游標(biāo)名 CURSOR FOR 子查詢 FOR UPDATE OF 字段名1,n; 【例4-46】定義按主變量DEPT查詢系里學(xué)生的游標(biāo)。,2. 打開游標(biāo)命令 游標(biāo)通過OPEN命令打開,打開游標(biāo)語句的格式為 EXEC SQL OPEN 游標(biāo)名; OPEN語句的作用是執(zhí)行游標(biāo)對(duì)應(yīng)的查詢語句,并將游標(biāo)指向結(jié)果集的第一條記錄前。 【例4-47】打開SX游標(biāo)。,3. 推進(jìn)游標(biāo)命令 游標(biāo)通過FETCH命令向前(或稱向下)推進(jìn)一條記錄。推進(jìn)游標(biāo)的語句格式為 EXEC SQL FETCH 游標(biāo)名 INTO 主變量組; 推進(jìn)游標(biāo)的作用是將游標(biāo)下移一行,讀出當(dāng)前的記錄,將當(dāng)前記錄的各數(shù)據(jù)項(xiàng)值放到INTO后的主變量組中。 【例4-48】將打開的指向系的游標(biāo)向前推進(jìn)。,4. 關(guān)閉游標(biāo)命令 由于許多系統(tǒng)允許打開的游標(biāo)數(shù)有一定的限制,所以當(dāng)數(shù)據(jù)處理完后應(yīng)及時(shí)把不使用的游標(biāo)關(guān)閉,以釋放結(jié)果集占用的緩沖區(qū)及其他資源。 關(guān)閉游標(biāo)使用CLOSE命令,CLOSE命令的具體格式為 EXEC SQL CLOSE 游標(biāo)名;,4.6 SQL的數(shù)據(jù)控制功能,4.6.1 數(shù)據(jù)控制的方法 數(shù)據(jù)庫系統(tǒng)通過以下三步來實(shí)現(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)用戶提出操作請(qǐng)求時(shí),系統(tǒng)首先要在數(shù)據(jù)字典中查找該用戶的數(shù)據(jù)操作權(quán)限,當(dāng)用戶擁有該操作權(quán)時(shí)才能執(zhí)行其操作,否則系統(tǒng)將拒絕其操作。,4.6.2 SQL Server的數(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)限不同,SQL Server中的系統(tǒng)特權(quán)如表4-11所示。,表4-11 SQL Server中的系統(tǒng)特權(quán),3. 對(duì)象特權(quán) 對(duì)象特權(quán)類似于數(shù)據(jù)庫操作語言DML的語句權(quán)限,它指用戶對(duì)數(shù)據(jù)庫中的表、視圖、存儲(chǔ)過程等對(duì)象的操作權(quán)限。SQL Server中的對(duì)象特權(quán)如表4-12所示。,表4-12 SQL Server中的對(duì)象特權(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 用戶組| PUBLIC WITH GRANT OPTION;,【例4-49】把修改學(xué)生學(xué)號(hào)和查詢學(xué)生表的權(quán)力授予用戶王平。 【例4-50】把建立數(shù)據(jù)庫和備份數(shù)據(jù)庫的權(quán)力賦給用戶王平。,2. 收權(quán)語句 數(shù)據(jù)庫管理員DBA、數(shù)據(jù)庫擁有者(建庫戶)DBO或數(shù)據(jù)庫對(duì)象擁有者DBOO(數(shù)據(jù)庫對(duì)象主要是基本表)可以通過REVOKE語句將其他用戶的數(shù)據(jù)操作權(quán)收回。 REVOKE語句的一般格式為 REVOKE 權(quán)限組|ALL PRIVILIGES ON 對(duì)象名 FROM 用戶名組| PUBLIC; 【例4-51】將用戶王平的可以在學(xué)生表中修改學(xué)生學(xué)號(hào)的權(quán)利收回。,3. 拒絕訪問語句 拒絕訪問語句的一般格式為 DENY ALL PRIVILIGES | 權(quán)限組 ON 對(duì)象名 TO 用戶組 | PUBLIC; 其中,ON子句用于說明對(duì)象特權(quán)的對(duì)象名;對(duì)象名指的是表名、視圖名、視圖和表的字段名或者過程名。,習(xí) 題 4,4.1 試述SQL語言的特點(diǎn)。 4.2 在嵌入式SQL中,如何區(qū)分SQL語句和主語言語句? 4.3 SQL語言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體,語句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. 使用視圖可以加快查詢語句的執(zhí)行速度 D. 使用視圖可以簡化查詢語句的編寫 4.5 在SQL語言的SELECT語句中,實(shí)現(xiàn)投影操作的是_子句。 A. SELECT B. FROM C. WHERE D. GROUP BY,4.6 SQL語言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體,語句ALTER TABLE實(shí)現(xiàn)_功能。 A. 數(shù)據(jù)查詢 B. 數(shù)據(jù)操縱 C. 數(shù)據(jù)定義 D. 數(shù)據(jù)控制 4.7 在關(guān)系數(shù)據(jù)庫系統(tǒng)中,為了簡化用戶的查詢操作,而又不增加數(shù)據(jù)的存儲(chǔ)空間,常用的方法是創(chuàng)建_。 A. 另一個(gè)表 B. 游標(biāo) C. 視圖 D. 索引,4.8 設(shè)職工_社團(tuán)數(shù)據(jù)庫有三個(gè)基本表: 職工(職工號(hào),姓名,年齡,性別) 社會(huì)團(tuán)體(編號(hào),名稱,負(fù)責(zé)人,活動(dòng)地點(diǎn)) 參
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公樓裝飾裝修工程環(huán)境保護(hù)措施
- 師德師風(fēng)培訓(xùn)心得體會(huì)
- 小學(xué)二年級(jí)下冊體育教學(xué)計(jì)劃
- 鄉(xiāng)村治理與城鄉(xiāng)融合發(fā)展-洞察分析
- 污水處理非織造過濾-洞察分析
- 行業(yè)流程標(biāo)準(zhǔn)化研究-洞察分析
- 通信產(chǎn)業(yè)前沿技術(shù)培養(yǎng)體系構(gòu)建-洞察分析
- 網(wǎng)絡(luò)思維模式演變-洞察分析
- 教師參加省培計(jì)劃“思政課一體化建設(shè)”培訓(xùn)心得體會(huì)
- 高中物理培訓(xùn)心得體會(huì)
- 數(shù)字工程勘察信息平臺(tái)構(gòu)建
- 噴涂設(shè)備保養(yǎng)和維護(hù)操作規(guī)程
- 中國特色社會(huì)主義理論與實(shí)踐復(fù)習(xí)資料-研究生
- 抖音學(xué)習(xí)考試題及答案
- 北師大附中2024屆高一上數(shù)學(xué)期末聯(lián)考試題含解析
- 后勤外包服務(wù)保密管理制度范文
- 小學(xué)國慶節(jié)主題活動(dòng)方案設(shè)計(jì)(四篇)
- 行政事業(yè)單位內(nèi)部控制培訓(xùn)課件
- 2009別克昂科雷維修手冊gd扉頁
- 數(shù)字化轉(zhuǎn)型對(duì)企業(yè)創(chuàng)新能力的影響研究
- 替人追款協(xié)議書
評(píng)論
0/150
提交評(píng)論