ppt數(shù)據(jù)庫實(shí)用教程四_第1頁
ppt數(shù)據(jù)庫實(shí)用教程四_第2頁
ppt數(shù)據(jù)庫實(shí)用教程四_第3頁
ppt數(shù)據(jù)庫實(shí)用教程四_第4頁
ppt數(shù)據(jù)庫實(shí)用教程四_第5頁
已閱讀5頁,還剩142頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、講授:麻淑芳 時間:2012年2月數(shù)據(jù)庫實(shí)用教程第四章 結(jié)構(gòu)化查詢語言 4.1 SQL概述 4.2 SQL基本知識 4.3 SQL的數(shù)據(jù)定義 4.4 SQL的數(shù)據(jù)查詢 4.5 SQL的數(shù)據(jù)更新 4.6 嵌入式SQL4.1 SQL概述結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)是一種介于關(guān)系代數(shù)與關(guān)系演算之間的語言,其功能包括查詢、操作、定義和控制四個方面,是一種通用的功能極強(qiáng)的關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言。SQL的發(fā)展歷程 1974年由Boyce和Chamberlin提出來,最初在System R關(guān)系數(shù)據(jù)庫中實(shí)現(xiàn)。 1986年成為美國國家標(biāo)準(zhǔn)。 1987年成為國際標(biāo)準(zhǔn)SQ

2、L86。 1989年,ISO頒布了增強(qiáng)完整性特征的SQL89標(biāo)準(zhǔn)。 1993年,ISO對SQL89標(biāo)準(zhǔn)進(jìn)行了大量的修改和擴(kuò)充,推出SQL2(SQL92)。SQL的發(fā)展歷程SQL是一種通用的、功能極強(qiáng)的關(guān)系數(shù)據(jù)庫語言。各數(shù)據(jù)庫廠家都推出了支持SQL的軟件或與SQL接口軟件,使自己的數(shù)據(jù)庫可以運(yùn)行SQL.許多其他軟件(例如圖形處理、人工智能、軟件工程工具、軟件開發(fā)工具等)也利用SQL語言的數(shù)據(jù)查詢功能,作為自身的一部分,使其數(shù)據(jù)查詢功能更強(qiáng)大.許多程序設(shè)計語言中也都引入了SQL.SQL數(shù)據(jù)庫的體系結(jié)構(gòu)uSQLSQL數(shù)據(jù)庫的體系結(jié)構(gòu)也是三級模式結(jié)數(shù)據(jù)庫的體系結(jié)構(gòu)也是三級模式結(jié)構(gòu)。構(gòu)。 外模式對應(yīng)于視

3、圖View和部分基本表; 模式對應(yīng)于全部基本表; 內(nèi)模式對應(yīng)于存儲文件; 元組稱為“行”; 屬性稱為“列”。SQL數(shù)據(jù)庫的體系結(jié)構(gòu)u SQLSQL數(shù)據(jù)庫的體系結(jié)構(gòu)具有如下特征:數(shù)據(jù)庫的體系結(jié)構(gòu)具有如下特征: 一個SQL模式是表和約束的集合。 一個表是行的集合,每行是列的序列,每列對應(yīng)一個數(shù)據(jù)項(xiàng)。 一個表可以是一個基本表,也可以是一個視圖?;颈砘颈硎菍?shí)際存儲在數(shù)據(jù)庫中的表。視圖視圖是從基本表或其他視圖中導(dǎo)出的表;它并不存放實(shí)際的數(shù)據(jù),僅保存視圖的定義;使用視圖時,根據(jù)視圖定義,從基本表中取數(shù)據(jù);因此,視圖實(shí)際上是一個虛表。SQL數(shù)據(jù)庫的體系結(jié)構(gòu) 一個基本表可以跨一個或多個存儲文件,一個存儲文

4、件也可存放一個或多個基本表。一個表可以帶若干索引,索引也存放在存儲文件中。存儲文件與外部存儲器上的一個物理文件對應(yīng)。 用戶可以用SQL語言對基本表和視圖進(jìn)行操作;從用戶的觀點(diǎn)看基本表和視圖是一樣的。 SQL用戶可以是應(yīng)用程序,也可以是終端用戶。SQL語句可嵌入在宿主語言的程序中使用,也能作為獨(dú)立的用戶接口,供終端用戶使用。SQL數(shù)據(jù)庫的體系結(jié)構(gòu)SQL的組成uSQLSQL主要分為四個部分:主要分為四個部分: 數(shù)據(jù)定義(SQL DDL) 數(shù)據(jù)操作(SQL DML) 數(shù)據(jù)控制(SQL DCL) 嵌入式SQL的使用SQL的組成u SQL具有很強(qiáng)的功能,但設(shè)計巧妙,使得語言十分簡捷,其核心功能只用其核心

5、功能只用9 9個動詞:個動詞:數(shù)據(jù)定義:數(shù)據(jù)定義:CREATE(CREATE(創(chuàng)建表、索引、視圖創(chuàng)建表、索引、視圖) ) DROP( DROP(刪除表、索引、視圖刪除表、索引、視圖) ) ALTER( ALTER(修改表修改表) )數(shù)據(jù)查詢:數(shù)據(jù)查詢:SELECT(SELECT(查詢查詢) )數(shù)據(jù)更新:數(shù)據(jù)更新:INSERT(INSERT(插入插入) ) DELETE( DELETE(刪除刪除) ) UPDATE( UPDATE(修改修改) )數(shù)據(jù)控制:數(shù)據(jù)控制:GRANT(GRANT(授權(quán)授權(quán)) ) REVOKE(REVOKE(收回授權(quán)收回授權(quán)) )4.2 SQL基本知識 數(shù)據(jù)類型數(shù)據(jù)類型

6、語法規(guī)定與約定語法規(guī)定與約定 表達(dá)式與運(yùn)算符表達(dá)式與運(yùn)算符 函數(shù)函數(shù) 數(shù)據(jù)類型 數(shù)據(jù)類型數(shù)據(jù)類型用于給特定的列提供數(shù)據(jù)規(guī)則,它決定著數(shù)據(jù)在列中的存儲方式和給列分配的數(shù)據(jù)長度 ,并且決定了此數(shù)據(jù)是字符、數(shù)字還是時間日期數(shù)據(jù)。 每一個具體的SQL的實(shí)施方案都有自己特有的數(shù)據(jù)類型,因此有必要使用與具體的實(shí)施方案相關(guān)的數(shù)據(jù)類型。 SQL提供一些基本數(shù)據(jù)類型基本數(shù)據(jù)類型,并允許用戶自定義新的域。數(shù)據(jù)類型基本數(shù)據(jù)類型uSQLSQL提供的基本數(shù)據(jù)類型有:提供的基本數(shù)據(jù)類型有: 數(shù)值型 字符串型 位串型 日期、時間型 邏輯型 數(shù)據(jù)類型基本數(shù)據(jù)類型(1 1)數(shù)值型)數(shù)值型 INT/INTEGERINT/INTE

7、GER:長整數(shù)長整數(shù) SMALLINTSMALLINT:短整數(shù)短整數(shù) REALREAL:浮點(diǎn)數(shù)浮點(diǎn)數(shù)(取決于機(jī)器精度) DOUBLE PRECISIONDOUBLE PRECISION:雙精度浮點(diǎn)數(shù)雙精度浮點(diǎn)數(shù)(取決于機(jī)器精度) FLOAT(nFLOAT(n) ):浮點(diǎn)數(shù)浮點(diǎn)數(shù),精度至少為n位數(shù)字 NUMERIC(p,dNUMERIC(p,d):定點(diǎn)數(shù)定點(diǎn)數(shù),有共p位數(shù)字,其中小數(shù)點(diǎn)后有d位。(也可寫成DECIMAL(p,d) 或DEC(p,d) ) 數(shù)據(jù)類型基本數(shù)據(jù)類型(2 2)字符串型)字符串型 CHAR(nCHAR(n) ):長度為 n 的定長字符串定長字符串,n是字符串中字符的個數(shù) V

8、ARCHAR(nVARCHAR(n) ):具有最大長度為 n 的變長字變長字符串符串 數(shù)據(jù)類型基本數(shù)據(jù)類型(3 3)位串型:)位串型: BIT(nBIT(n) ):長度為 n 的二進(jìn)制位串二進(jìn)制位串 BIT VARYING(nBIT VARYING(n) ):最大長度為 n 的變長二變長二進(jìn)制位串進(jìn)制位串?dāng)?shù)據(jù)類型基本數(shù)據(jù)類型(4 4)日期、時間型:)日期、時間型: DATEDATE:日期型:日期型 包含:年、月、日 格式為:YYYY-MM-DD TIME TIME:時間型:時間型 包含:一日的時、分、秒 格式為:HH:MM:SS 數(shù)據(jù)類型基本數(shù)據(jù)類型(5 5)邏輯型:)邏輯型: BOOLEAN

9、BOOLEAN:表示具有邏輯類型的值。 可能的值是:TRUETRUE、FALSEFALSE和和UNKNOWNUNKNOWN SQL支持空值空值(NULL)(NULL)的概念,空值是RDB中的一個重要概念,與空(或空白)字符串、數(shù)值0具有不同的含義,不能把它理解為任何意義的數(shù)據(jù)。數(shù)據(jù)類型基本數(shù)據(jù)類型 有的系統(tǒng)可能還會提供貨幣型、文本貨幣型、文本型、圖像型型、圖像型等類型。 SQL允許在上面列出的數(shù)據(jù)類型(值域)上執(zhí)行比較操作,但算數(shù)操作只限于數(shù)數(shù)值型值型。數(shù)據(jù)類型用戶定義類型uSQLSQL允許用戶定義新的域,并在定以后允許用戶定義新的域,并在定以后作為基本數(shù)據(jù)類型看待:作為基本數(shù)據(jù)類型看待:例如

10、:例如:CREATE DOMAINCREATE DOMAIN PERSON_NAME CHAR(10) PERSON_NAME CHAR(10)語法規(guī)定與約束1 1、 語句格式約定符號語句格式約定符號 :其中的內(nèi)容為必選項(xiàng),它表示實(shí)際語義,不能為空; :其中內(nèi)容為任選項(xiàng); 或或:必選其中之一項(xiàng); ,nn:表示前面的項(xiàng)可以重復(fù)多次。語法規(guī)定與約束2 2、 語法規(guī)定語法規(guī)定 一般語法規(guī)定 SQL中數(shù)據(jù)項(xiàng)(列、表和視圖)的分隔符為“ , ”; 字符串常數(shù)的定界符用單引號“ ”表示。 SQL特殊語法規(guī)定 SQL的關(guān)鍵詞一般使用大寫字母表示; SQL語句的結(jié)束符為“ ;”; SQL采用格式化書寫方式。表

11、達(dá)式與運(yùn)算符u 表達(dá)式:表達(dá)式:由一個或多個值、運(yùn)算符和函數(shù)組合而成,可計算出一個值,其數(shù)據(jù)類型一般為它的成分的數(shù)據(jù)類型。u 運(yùn)算符:運(yùn)算符:是保留字或字符,主要用于在子句中執(zhí)行比較和數(shù)學(xué)運(yùn)算等操作。 在SQL語句中運(yùn)算符用于確定條件或建立語句中多個條件之間的連接。表達(dá)式與運(yùn)算符1.1. 比較運(yùn)算符比較運(yùn)算符2.2. 算術(shù)運(yùn)算符算術(shù)運(yùn)算符3.3. 謂詞謂詞4.4. 邏輯運(yùn)算符邏輯運(yùn)算符表達(dá)式與運(yùn)算符比較運(yùn)算符1.1. 比較運(yùn)算符比較運(yùn)算符 在SQL語句中用于測試單個的值。包括: 、!或、 用于測試數(shù)據(jù)相等、不等、小于、大于、小于等于和大于等于的各種情況。 當(dāng)條件滿足時,返回True,否則返回F

12、alse。 當(dāng)被測試的值為NULL時,返回Unknown。表達(dá)式與運(yùn)算符算術(shù)運(yùn)算符2. 2. 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 用于執(zhí)行數(shù)學(xué)運(yùn)算的功能用于執(zhí)行數(shù)學(xué)運(yùn)算的功能 通常有四種操作符:+ +、-、* 和 / 可單獨(dú)使用,也可組合使用表達(dá)式與運(yùn)算符謂詞3. 3. 謂詞謂詞 SQLSQL語言中使用謂詞來語言中使用謂詞來構(gòu)造條件構(gòu)造條件,以便只處,以便只處理滿足這些條件的那些理滿足這些條件的那些行(元組)行(元組)。 IS NULL / IS NOT NULL BETWEENAND / NOT BETWEENAND LIKE / NOT LIKE IN / NOT IN ALL和ANY EXISTS /

13、 NOT EXISTS UNIQUE / NOT UNIQUE表達(dá)式與運(yùn)算符謂詞 IS NULL / IS NOT NULL IS NULL / IS NOT NULL 用于判斷字段的值是否是用于判斷字段的值是否是空值空值。例:查詢?nèi)鄙俪煽儯℅RADE)的學(xué)生的學(xué)號??稍赪HERE子句中使用的表達(dá)式為:GRADE IS NULL 注意:注意:不能用“”來查找NULL值。若使用“”,則表示要查找的是字符“NULL”,而不是NULL值。 例:查找不屬于任何系的學(xué)生。錯誤的表達(dá)式為:SDEPTNULL 表達(dá)式與運(yùn)算符謂詞 BETWEENAND / NOT BETWEENAND BETWEENAND

14、/ NOT BETWEENAND 謂詞謂詞BETWEENBETWEEN用于判斷值是否在給定的兩個用于判斷值是否在給定的兩個值之間,注意值之間,注意包括邊值包括邊值。 例:查找成績(GRADE)在90分到100分之間的學(xué)生。可在WHERE子句中使用表達(dá)式: GRADE BETWEEN 90 AND 100 也可使用表達(dá)式:GRADE90 AND GRADE100 顯然在可讀性上謂詞BETWEEN更好一些。 BETWEEN前面加上NOT表示否定。 表達(dá)式與運(yùn)算符謂詞 LIKE / NOT LIKE LIKE / NOT LIKE 可以用來進(jìn)行字符串的匹配??梢杂脕磉M(jìn)行字符串的匹配。其一般語法格 式

15、如下: NOT LIKE NOT LIKE ESCAPEESCAPE 在指定的關(guān)系中查找指定屬性列值與 相匹配的元組。表達(dá)式與運(yùn)算符謂詞 LIKE / NOT LIKE LIKE / NOT LIKE說明說明1 1: 中經(jīng)常使用通配符通配符( (百分百分號號) )和和_(_(下劃線下劃線) ),且可組合使用。其中: ( (百分號百分號) ):代表任意長度(長度可能為0)的字符串; _(_(下劃線下劃線) ):代表任意單個字符;例: A%B 以A開頭,以B結(jié)尾的任意長度的字符串。 A_B 以A開頭,以B結(jié)尾長度為3的任意字符串。 表達(dá)式與運(yùn)算符謂詞 LIKE / NOT LIKE LIKE /

16、NOT LIKE說明說明2 2:如果LIKE后面的匹配符中不含通配符,則可以用“”運(yùn)算符取代謂詞LIKE,用或!運(yùn)算符取代謂詞NOT LIKE。說明說明3 3:若要查詢的字符串本身就含有“%”或“_”,則需要使用由ESCAPE指定的換碼字換碼字符符來區(qū)分。表達(dá)式與運(yùn)算符謂詞 LIKE / NOT LIKE LIKE / NOT LIKE例:要查找“以COM_cn開始且最后一個字母為任意的字符串”,那么在WHERE子句中可用LIKE謂詞表示為:LIKECOM_cn_ESCAPELIKECOM_cn_ESCAPE 其中,指定的換碼字符為;所以匹配符COM_cn_中的第一個下劃線前因?yàn)橛袚Q碼字符,所

17、以將其解釋為下劃線本身,而不再是通配符;第二個下劃線則仍是通配符。 表達(dá)式與運(yùn)算符謂詞 IN / NOT IN IN / NOT IN 用于判斷值是否屬于指定的集合,實(shí)現(xiàn)集合用于判斷值是否屬于指定的集合,實(shí)現(xiàn)集合成員的資格比較。成員的資格比較。其語法格式為:屬性屬性 IN/NOT ININ/NOT IN(集合)(集合) 這里的集合可以是屬性值的集合,也可以是一個SELECT語句,但它們中元素應(yīng)與前面屬性具有一致的結(jié)構(gòu)。例:查找學(xué)生所在系(SDEPT)是否為以下幾個值中的一個:CS,MA,IS??稍赪HERE子句 中使用表達(dá)式: SDEPT IN (CS,MA,IS) 表達(dá)式與運(yùn)算符謂詞 ALL

18、 ALL和和ANYANY(SOMESOME) 是是定量謂詞定量謂詞,用于將某個值同另一集,用于將某個值同另一集合中的每個值相比較,實(shí)現(xiàn)集合成員合中的每個值相比較,實(shí)現(xiàn)集合成員的算術(shù)比較。的算術(shù)比較。其語法格式為:表達(dá)式表達(dá)式 ALL/ANY (ALL/ANY (集合集合) ) 這里的集合可以是值的集合,也可以是一個SELECT語句,但它們中元素應(yīng)與前面表達(dá)式的值具有一致的結(jié)構(gòu)。表達(dá)式與運(yùn)算符謂詞 ALL ALL和和ANYANY(SOMESOME) 是算術(shù)比較運(yùn)算符?!癆NYANY”表示左邊表達(dá)式的值與右邊集合中至少一個元素滿足運(yùn)算;“ALLALL”表示左邊的表達(dá)式的值與右邊集合中每一個元素滿足

19、運(yùn)算。 SQL中規(guī)定ANY和SOME為同義,早期標(biāo)準(zhǔn)用ANY。 另外,=ANT=ANT與ININ等價;ALLALL與NOT INNOT IN等價。表達(dá)式與運(yùn)算符謂詞 EXISTS / NOT EXISTS EXISTS / NOT EXISTS 是存在量詞,用于測試一個集合是否為是存在量詞,用于測試一個集合是否為非空或空,實(shí)現(xiàn)空關(guān)系的測試。非空或空,實(shí)現(xiàn)空關(guān)系的測試。其語法格式為: EXISTS/NOT EXISTS EXISTS/NOT EXISTS(子查詢)(子查詢) 帶有EXISTS謂詞的子查詢不返回任何數(shù)據(jù)。當(dāng)子查詢結(jié)果非空非空時,返回邏輯真值True;否則,返回邏輯假值False。

20、表達(dá)式與運(yùn)算符謂詞 UNIQUE / NOT UNIQUE UNIQUE / NOT UNIQUE 用于測試一個集合里是否有重復(fù)元組用于測試一個集合里是否有重復(fù)元組存在,實(shí)現(xiàn)重復(fù)元組的測試。存在,實(shí)現(xiàn)重復(fù)元組的測試。其語法格式為:UNIQUE/NOT UNIQUE(UNIQUE/NOT UNIQUE(集合集合) ) 對于UNIQUE操作,當(dāng)集合中不存在重復(fù)元組時,其邏輯值為True,否則為False。表達(dá)式與運(yùn)算符邏輯運(yùn)算符3. 3. 邏輯運(yùn)算符邏輯運(yùn)算符 NOT AND OR 表達(dá)式與運(yùn)算符邏輯運(yùn)算符 NOT NOT 將它使用的邏輯運(yùn)算符的意義反轉(zhuǎn)。將它使用的邏輯運(yùn)算符的意義反轉(zhuǎn)。 如:NO

21、T BETWEEN、NOT IN、NOT EXISTS、NOT LIKE、NOT UNIQUE、 NOT 比較運(yùn)算符 等。 表達(dá)式與運(yùn)算符邏輯運(yùn)算符 AND AND 連接多個查詢條件,表示所有的查詢條件都連接多個查詢條件,表示所有的查詢條件都 成立。成立。例:查找年齡(AGE)為25歲,并且家庭住址 (ADDRESS)住在大連的女學(xué)生(SEX表示性別)??墒褂帽磉_(dá)式為:AGE25 AND ADDRESS LIKE%大連% AND SEX女表達(dá)式與運(yùn)算符邏輯運(yùn)算符 OR OR 連接多個查詢條件,表示至少有一個查連接多個查詢條件,表示至少有一個查詢條件成立。詢條件成立。例:查找年齡(AGE)為20

22、歲或25歲的學(xué)生??墒褂帽磉_(dá)式為: AGE20 OR AGE25 函數(shù)1. 1. 單行函數(shù)單行函數(shù) 2. 2. 聚合函數(shù)聚合函數(shù) 函數(shù)單行函數(shù)1.1. 單行函數(shù)單行函數(shù)單行函數(shù)主要分為數(shù)值函數(shù)、字符函數(shù)、日期函數(shù)、轉(zhuǎn)換函數(shù)等;它對查詢的表或視圖的每一行返回一個結(jié)果行。 函數(shù)單行函數(shù) 數(shù)值函數(shù):數(shù)值函數(shù):用于接受數(shù)值輸入,返回數(shù)值。 許多函數(shù)的返回值可精確到38位十進(jìn)制數(shù)字 ,三角函數(shù)精確到36位十進(jìn)制數(shù)字。 單行字符函數(shù):單行字符函數(shù):用于接受字符輸入,可返回字符值或數(shù)值。如:ISLOWER()轉(zhuǎn)換為小寫字母。 日期函數(shù):日期函數(shù):是操作DATE數(shù)據(jù)類型的值,所有日期函數(shù)都返回一個DATE類型

23、的值。 轉(zhuǎn)換函數(shù):轉(zhuǎn)換函數(shù):是將一種數(shù)據(jù)類型的值轉(zhuǎn)換成另一種數(shù)據(jù)類型的值。函數(shù)聚合函數(shù) 聚合函數(shù)聚合函數(shù) 又稱統(tǒng)計函數(shù),是用來累加、合計和顯示數(shù)據(jù)極限的函數(shù),它主要用于給SQL語句提供統(tǒng)計信息。 常用的統(tǒng)計函數(shù)有COUNT(計數(shù))、 SUM(和)、AVG(平均值)、 MAX(最大值)、 MIN(最小值)等。注:聚合函數(shù)只能出現(xiàn)在查詢語句中SELECT后的列表達(dá)式,或者GROUP BY下的HAVING子句中。不能用在WHERE子句中。4.3 SQL的數(shù)據(jù)定義SQL的數(shù)據(jù)定義部分包括對SQL模式(Schema)、基本表(關(guān)系,Table)、視圖(View)、索引(Index)的創(chuàng)建和撤銷操作。SQ

24、L模式的創(chuàng)建和撤銷1.1.SQLSQL模式的創(chuàng)建模式的創(chuàng)建CREATE SCHEMACREATE SCHEMA AUTHORIZATION AUTHORIZATION CREATE DATABASECREATE DATABASE AUTHORIZATION AUTHORIZATION 2. SQL2. SQL模式的撤銷模式的撤銷DROP SCHEMADROP SCHEMACASCADE|RESTRICTCASCADE|RESTRICT CASCADECASCADE(連鎖式)(連鎖式):把SQL模式及其下屬的基本表、視圖縮影等所有元素全部撤銷 RESTRICTRESTRICT(約束式)(約束式)

25、:只有當(dāng)SQL模式中沒有任何下屬元素是才能撤銷SQL模式,否則拒絕執(zhí)行基本表的創(chuàng)建、修改和撤消1.1.基本表的創(chuàng)建基本表的創(chuàng)建CREATE TABLE SQLCREATE TABLE SQL模式名模式名. .基本表名基本表名( (列名列名 類型類型 列級完整性約束條件列級完整性約束條件 , 完整性約束,完整性約束,) 基本表名:基本表名:需指出他放在哪個模式中 列名:列名:屬性名 類型:類型:屬性的數(shù)據(jù)類型,可以是基本類型,也可以是用戶定義的域名基本表的創(chuàng)建、修改和撤消1.1. 基本表的創(chuàng)建基本表的創(chuàng)建CREATE TABLE SQLCREATE TABLE SQL模式名模式名. .基本表名基

26、本表名( (列名列名 類型類型 列級完整性約束條件列級完整性約束條件 , 完整性約束,完整性約束,)列級完整性約束條件:列級完整性約束條件:NULL/NOT NULL: 該項(xiàng)是否可以取空值UNIQUE: 該項(xiàng)是否具有唯一性 完整性約束:完整性約束:PRIMARY KEY: 設(shè)置主鍵CHECK: 檢查子句,用戶自定義完整性規(guī)則FOREIGN KEY: 設(shè)置外鍵基本表的創(chuàng)建、修改和撤消2. 2. 基本表結(jié)構(gòu)的修改基本表結(jié)構(gòu)的修改(1 1)增加新屬性:)增加新屬性:ALTER TABLE ALTER TABLE 基本表名基本表名 ADD ADD 新屬性名新屬性名 新新屬性類型屬性類型(2 2)刪除原

27、有屬性:)刪除原有屬性:ALTER TABLE ALTER TABLE 基本表名基本表名 DROP DROP 屬性名屬性名CASCADE|RESTRICTCASCADE|RESTRICT(3 3)撤銷基本表:)撤銷基本表:DROP TABLE DROP TABLE 基本表名基本表名 CASCADE|RESTRICTCASCADE|RESTRICT視圖的創(chuàng)建和撤消1. 1. 視圖的創(chuàng)建:視圖的創(chuàng)建:CREATE VIEW CREATE VIEW 視圖名(列名表)視圖名(列名表)AS SELECT AS SELECT 查詢語句查詢語句2. 2. 視圖的撤銷:視圖的撤銷:DROP VIEW DROP

28、 VIEW 視圖名視圖名索引的創(chuàng)建和撤消1. 1. 索引的創(chuàng)建:索引的創(chuàng)建:CREATE UNIQUE INDEX CREATE UNIQUE INDEX 索引名索引名 ON ON 基本表基本表名(名( ,) UNIQUEUNIQUE表示此索引的每一個索引值只對應(yīng)唯一的表示此索引的每一個索引值只對應(yīng)唯一的數(shù)據(jù)記錄數(shù)據(jù)記錄 包括包括ASCASC 和和DESCDESC ,默認(rèn)為,默認(rèn)為ASCASC2. 2. 索引的撤銷:索引的撤銷:DROP INDEX DROP INDEX 索引名索引名4.4 SQL的數(shù)據(jù)查詢SQL的數(shù)據(jù)查詢是關(guān)系運(yùn)算理論在SQL語言中的主要體現(xiàn)。只有一條SELECT語句。在學(xué)習(xí)

29、時,應(yīng)注意把SELECT語句和關(guān)系代數(shù)表達(dá)式聯(lián)系起來考慮問題。SELECT語句格式1.1.SELECTSELECT語句的來歷語句的來歷 在關(guān)系代數(shù)中最常用的式子是下列表達(dá)式: A1,AnA1,An ( (F F(R1(R1RmRm) ) 這里R1、Rm為關(guān)系,F(xiàn)是條件,A1、An為屬性。 針對上述表達(dá)式,SQL為此設(shè)計了SELECT-FROM-WHERE句型: SELECT A1, , An SELECT A1, , An FROM R1, , RmFROM R1, , Rm WHERE F ;WHERE F ; 這個句型是從關(guān)系代數(shù)表達(dá)式演變來的,但WHERE子句中的條件表達(dá)式F要比關(guān)系代數(shù)

30、公式更靈活。 SELECT語句格式1.1.SELECTSELECT語句的來歷語句的來歷在WHERE子句的條件表達(dá)式 F 中可以包含如下內(nèi)容: 算術(shù)運(yùn)算符 比較運(yùn)算符 謂詞 函數(shù) F 中的運(yùn)算對象還可以是另一個SELECT語句,即SELECT語句可以嵌套SELECT語句的查詢結(jié)果之間還可以進(jìn)行集合的并( UNION )、交( INTERSECT )、差( EXCEPT )操作。SELECT語句格式1.1.SELECTSELECT語句的句法語句的句法SELECTSELECT ALL|DISTINCT ALL|DISTINCT * *| 1 , 2 FROMFROM , 2 WHEREWHERE G

31、ROUP BYGROUP BY 1 HAVINGHAVING ORDER BYORDER BY 2 ASCASC|DESC,;|DESC,; SELECT語句格式 SELECTSELECT子句子句:指定要顯示的屬性列,表示查詢。 其中:ALL ALL 為顯示所有滿足條件的元組;DISTINCT ISTINCT 為消除重復(fù)元組;* * 表示所有列;目標(biāo)列表達(dá)式目標(biāo)列表達(dá)式為查詢結(jié)果, ,可以有函數(shù)運(yùn)算。 FROMFROM子句子句:指定查詢對象,表示從哪些表或視圖中查詢。 WHEREWHERE子句子句:指定查詢條件。 GROUP BYGROUP BY子句子句:按指定的列分組,通常會在每組中使用聚合

32、函數(shù)。例如,查詢每個學(xué)生成績的平均值時, ,要按學(xué)號將每個學(xué)生分為一組。 HAVINGHAVING子句子句:對GROUP BY分組進(jìn)行篩選的條件。 ORDER BYORDER BY子句子句:對輸出的目標(biāo)表按指定列排序。其中ASCASC為升序(缺省值),DESCDESC為降序。SELECT語句格式 另外,另外,SELECTSELECT子句,子句,F(xiàn)ROMFROM子句是不可省略的部分,子句是不可省略的部分,整個語句的執(zhí)行過程為:整個語句的執(zhí)行過程為:首先,讀取FROMFROM子句子句中的基本表、視圖的數(shù)據(jù),執(zhí)行笛卡兒積操作;選取滿足WHEREWHERE子句子句中行條件表達(dá)式的元組;按GROUP B

33、YGROUP BY子句子句中指定列的值分組,同時提取滿足HAVINGHAVING子句子句中組條件表達(dá)式的那些組;最終,按SELECTSELECT子句子句中給出的列名或列表達(dá)式求值輸出;按ORDER BYORDER BY子句子句對輸出的目標(biāo)表進(jìn)行排序。 其中, WHEREWHERE子句子句稱為“行條件子句行條件子句”,GROUP GROUP BYBY子句子句稱為“分組子句分組子句”,HAVINGHAVING子句子句稱為“組組條件子句條件子句”,ORDER BYORDER BY子句子句稱為“排序子句排序子句”。單表查詢單表查詢僅涉及一個表。該查詢中涉及單表查詢僅涉及一個表。該查詢中涉及到的內(nèi)容:到

34、的內(nèi)容:1. 選擇表中的若干列2. 選擇表中的若干元組3. 對查詢結(jié)果排序 ORDER BY 子句4. 使用聚合函數(shù)5. 對查詢結(jié)果分組 GROUP BY 子句 單表查詢1.1.選擇表中的若干列選擇表中的若干列SELECTSELECT子句子句(1 1)查詢指定列)查詢指定列 SELECT 列名列名1 ,1 ,列名列名22 FROM 表名(2 2)查詢?nèi)苛校┎樵內(nèi)苛?SELECT * * FROM 表名單表查詢1.1.選擇表中的若干列選擇表中的若干列SELECTSELECT子句子句(3 3)查詢經(jīng)過計算的列)查詢經(jīng)過計算的列SELECT FROM 表名 其中目標(biāo)列表達(dá)式可以為:字符串常量,算

35、術(shù)表達(dá)式,函數(shù),列別名字符串常量,算術(shù)表達(dá)式,函數(shù),列別名注:以上內(nèi)容所對應(yīng)查詢結(jié)果表中的列標(biāo)題必須通過列別名才能標(biāo)識,否則顯示“無列名”。單表查詢1.1.選擇表中的若干列選擇表中的若干列SELECTSELECT子句子句(3 3)查詢經(jīng)過計算的列)查詢經(jīng)過計算的列例:查詢?nèi)w學(xué)生的姓名、出生年份和所屬系, 要求用小寫字母表示所有系名。并通過列別名改變查詢結(jié)果的列標(biāo)題 SELECT SnameSELECT Sname AS AS NAME,Year of Birth: NAME,Year of Birth: BIRTH , 2004-Sage BIRTHDAY , BIRTH , 2004-Sa

36、ge BIRTHDAY , ISLOWER(Sdept ISLOWER(Sdept) DEPARTMENT ) DEPARTMENT FROM S; FROM S;輸出結(jié)果:NAME NAME BIRTH BIRTH BIRTHDAY BIRTHDAY DEPARTMENT DEPARTMENT- - - - - - -李勇李勇 Year of Birth: 1984 csYear of Birth: 1984 cs 單表查詢2.2.選擇表中的若干元組選擇表中的若干元組(1 1)消除取值重復(fù)的行)消除取值重復(fù)的行 在SELECT子句中消除重復(fù)的行使用DISTINCTDISTINCT,保留重復(fù)的

37、行使用ALLALL,默認(rèn)為ALL。 注意DISTINCT短語的作用范圍是所有目標(biāo)列。例:查詢選修課程的各種成績 錯誤的寫法: SELECT DISTINCT Cno, DISTINCT Grade FROM SC; 正確的寫法:SELECT DISTINCT Cno, Grade FROM SC; 單表查詢2.2.選擇表中的若干元組選擇表中的若干元組(2 2)查詢滿足條件的元組)查詢滿足條件的元組屬于選擇運(yùn)算,通過WHERE子句實(shí)現(xiàn)。WHERE常用的查詢條件:單表查詢3.3.對查詢結(jié)果排序?qū)Σ樵兘Y(jié)果排序ORDER BYORDER BY子句子句 可以按一個或多個屬性列排序 升序?yàn)锳SCASC;降

38、序?yàn)镈ESCDESC;缺省為升序 當(dāng)排序列含空值空值時: ASC:排序列為空值的元組最后顯示 DESC:排序列為空值的元組最先顯示單表查詢4. 4. 使用聚合函數(shù)使用聚合函數(shù)聚合函數(shù)聚合函數(shù)能對集合中的一組數(shù)據(jù)進(jìn)行計算,返回單個計算結(jié)果,實(shí)現(xiàn)一定的統(tǒng)計功能。與其它函數(shù)的根本區(qū)別與其它函數(shù)的根本區(qū)別就是它們一般作用在多條記錄上。SQL提供的聚合函數(shù)有: 計數(shù):計數(shù):COUNT(DISTINCT|ALL COUNT(DISTINCT|ALL * *|) ) 計算總和:計算總和:SUM(DISTINCT|ALLSUM(DISTINCT|ALL) 計算平均值:計算平均值:AVG(DISTINCT|AL

39、LAVG(DISTINCT|ALL) ) 求最大值:求最大值:MAX(DISTINCT|ALLMAX(DISTINCT|ALL) ) 求最小值:求最小值:MIN(DISTINCT|ALLMIN(DISTINCT|ALL) 單表查詢4. 4. 使用聚合函數(shù)使用聚合函數(shù) 其中,DISTINCT短語表示在計算時要取消指定列中的重復(fù)值;ALL短語表示不取消重復(fù)值;ALL為缺省值。 除COUNT函數(shù)之外,聚合函數(shù)忽略空值。 另外,聚合函數(shù)通常和SELECT語句中的GROUP BY子句一起使用。單表查詢4. 4. 使用聚合函數(shù)的范圍:使用聚合函數(shù)的范圍: 聚組函數(shù)不能不能出現(xiàn)在查詢條件WHERE子句中或連

40、接條件ON之后。 聚合函數(shù)只能用在SELECT之后作為輸出的列表達(dá)式; 而作為查詢條件,聚合函數(shù)只能出現(xiàn)在GROUP BY下的HAVING子句,或選擇列表所包含的子查詢(子查詢的SELECT)之后,并且要對其進(jìn)行聚合的列必須是外部引用。單表查詢4. 4. 使用聚合函數(shù)使用聚合函數(shù) 在SQL語句中同時包含WHERE子句,GROUP BY子句, HAVING子句以及聚集函數(shù)時的執(zhí)行順執(zhí)行順序序:(1)按WHERE篩選記錄。(2)使用GROUP BY子句將WHERE篩選出的記錄進(jìn)行分組。(3)通過HAVING子句將分組后的結(jié)果根據(jù)聚合函數(shù)的運(yùn)算(如果HAVING子句包含聚集函數(shù))進(jìn)行過濾。單表查詢4

41、. 4. 使用聚合函數(shù)使用聚合函數(shù)例:查詢有3門以上課程是90分以上的學(xué)生的學(xué)號及(90分以上的)課程數(shù)。SELECTSELECT Sno, COUNT(*) AS Count_CnoFROMFROM SC WHEREWHERE Grade=90 GROUPGROUP BYBY Sno HAVINGHAVING COUNT(*) =3; 當(dāng)使用聚合函數(shù)時,在SELECT后面使用的列名必須包含在聚合函數(shù)中,或者包含在GROUP BY子句中。如此例中SELECT之后不能包含Cno。單表查詢4. 4. 使用聚合函數(shù)使用聚合函數(shù) 在上例中,WHEREWHERE子句子句的作用是在對查詢結(jié)果進(jìn)行分組前,將

42、不符合WHERE條件的行去掉,即在分組之前過濾數(shù)據(jù);而HAVINGHAVING子句子句的作用是篩選滿足條件的組,即在分組之后過濾數(shù)據(jù)。 因此,WHERE條件中不能包含聚合函數(shù),而HAVING條件中卻經(jīng)常包含聚合函數(shù),以顯示特定的組。單表查詢4. 4. 使用聚合函數(shù)使用聚合函數(shù) 聚合函數(shù)也可出現(xiàn)在嵌套子查詢SELECT后的列表達(dá)式中的例子:例:查詢其它系中比信息系所有學(xué)生年齡都小的學(xué)生的姓名及年齡 SELECT Sname,Sage FROM SWHERE Sdept IS AND Sage =90 GROUP BY Sno HAVING COUNT(*) =3;單表查詢5.5.對查詢結(jié)果分組對

43、查詢結(jié)果分組GROUP BYGROUP BY子句子句 例:顯示每個地區(qū)的總?cè)丝跀?shù)和總面積,且僅顯示那些總面積超過1000000的地區(qū)。 SELECT Region,SUM(Population), SUM(Area)FROM bbcGROUP BY RegionHAVING SUM(Area)1000000 單表查詢5.5.對查詢結(jié)果分組對查詢結(jié)果分組GROUP BYGROUP BY子句子句 使用使用HAVINGHAVING短語在分組后進(jìn)行篩選短語在分組后進(jìn)行篩選 只有滿足HAVING短語指定條件的組才輸出 HAVINGHAVING短語短語與WHEREWHERE子句子句的區(qū)別:作用對象不同 W

44、HEREWHERE子句子句的作用對象是基表或視圖,從中選擇滿足條件的記錄。其在分組之前過濾數(shù)據(jù),不能包含聚合函數(shù)。HAVINGHAVING短語短語的作用對象是組,從中選擇滿足條件的組。其在分組之后過濾數(shù)據(jù),經(jīng)常包含聚合函數(shù)。多表查詢多表查詢實(shí)現(xiàn)來自多個關(guān)系的查詢。多表查詢實(shí)現(xiàn)來自多個關(guān)系的查詢。如果要引用不同關(guān)系中的同名屬性,則采用“關(guān)系名.屬性名”的形式表示。該查詢中涉及到的內(nèi)容:該查詢中涉及到的內(nèi)容:1. 連接查詢2. 嵌套查詢多表查詢連接查詢SQLSQL中連接查詢的主要類型:中連接查詢的主要類型:(1)廣義笛卡爾積查詢(2)等值連接查詢(3)自然連接查詢(4)非等值連接查詢(5)自身連接

45、查詢(6)外連接查詢(7)復(fù)合條件連接查詢 多表查詢連接查詢(1 1)廣義笛卡爾積查詢)廣義笛卡爾積查詢不帶連接謂詞的連接 很少使用 例: SELECT S.* , SC.* FROM S, SC多表查詢連接查詢(2 2)等值連接查詢)等值連接查詢 連接運(yùn)算符為連接運(yùn)算符為“ “ = ”= ”的連接操作的連接操作 .=. 2 任何子句中引用表1和表2中同名屬性時,都必須加表名前綴。引用唯一屬性名時可以加也可以省略表名前綴。 例:查詢每個學(xué)生及其選修課程的情況。 SELECT S.*, SC.* FROM S, SC WHERE S.Sno = SC.Sno; 多表查詢連接查詢(3 3)自然連接

46、查詢)自然連接查詢自然連接是等值連接的一種特殊情況,把目自然連接是等值連接的一種特殊情況,把目標(biāo)列中標(biāo)列中重復(fù)的屬性列去掉重復(fù)的屬性列去掉。例:查詢每個學(xué)生及其選修課程的情況,用自然連接完成。 SELECT S.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade FROM S, SC WHERE S.Sno = SC.Sno; 多表查詢連接查詢(4 4)非等值連接查詢)非等值連接查詢 連接運(yùn)算符連接運(yùn)算符 不是不是“ “ = ”= ”的連接操作的連接操作.1.2 為為比較運(yùn)算符比較運(yùn)算符:、=、=、!=. BETWEEN BETWEEN . AND AND .

47、3 多表查詢連接查詢(5 5)自身連接查詢)自身連接查詢 一個表與其自己進(jìn)行連接,稱為表的自身連接一個表與其自己進(jìn)行連接,稱為表的自身連接需要給表起別名別名以示區(qū)別由于所有屬性名都是同名屬性,因此必須使用別名前綴 例:查詢每一門課的間接先修課(即先修課的先修課) SELECT FIRST.Cno, SECOND.Cpno FROM C FIRST, C SECOND WHERE FIRST.Cpno = SECOND.Cno; 多表查詢連接查詢(6 6)外連接查詢)外連接查詢(Outer Join)外連接與普通連接的區(qū)別外連接與普通連接的區(qū)別 普通連接操作只輸出滿足連接條件的元組外連接操作以指

48、定表為連接主體連接主體,將主體表中不滿足連接條件的元組一并輸出外連接是對標(biāo)準(zhǔn)SQL的擴(kuò)充,不同的DBMS對外連接的規(guī)定存在差異多表查詢連接查詢(6 6)外連接查詢)外連接查詢(Outer Join) 例:查詢每個學(xué)生及其選修課程的情況(包括沒有選修課程的學(xué)生)用外連接操作 SELECT SELECT S.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade FROM FROM S LEFT OUT JOIN SC ON S.Sno = SC.Sno; 多表查詢連接查詢(6 6)外連接查詢)外連接查詢(Outer Join)多表查詢連接查詢(6 6)外連接查詢)外連

49、接查詢(Outer Join) 非主體表非主體表有一“萬能”的虛行,該行全部由空值組成。 虛行可以和主體表中所有不滿足連接條件的元組進(jìn)行連接。 由于虛行各列全部是空值,因此與虛行連接的結(jié)果中,來自非主體表的屬性值全部是空值。多表查詢連接查詢(6 6)外連接查詢)外連接查詢(Outer Join) 左外連接:左外連接: LEFT OUTER JOIN / LEFT JOIN 右外連接:右外連接: RIGHT OUTER JOIN / RIGHT JOIN 完全外連接:完全外連接: FULL OUTER JOIN / FULL JOIN 多表查詢連接查詢(7 7)復(fù)合條件連接)復(fù)合條件連接 WHE

50、REWHERE子句中含子句中含多個連接條件多個連接條件時,稱為時,稱為復(fù)合條件復(fù)合條件連接連接例:查詢選修C2號課程且成績在90分以上的所有學(xué)生的學(xué)號、姓名 SELECTSELECT S.Sno, S.Sname FROMFROM S,SCWHEREWHERE S.Sno = SC.Sno ANDAND /*連接謂詞*/ SC.Cno=C2ANDAND /*其他限定條件*/ SC.Grade 90; /*其他限定條件*/多表查詢連接查詢(7 7)復(fù)合條件連接)復(fù)合條件連接 WHEREWHERE子句中含子句中含多個連接條件多個連接條件時,稱為時,稱為復(fù)合條件復(fù)合條件連接連接例:查詢每個學(xué)生的學(xué)號

51、、姓名、選修的課程名及成績。 SELECT SELECT S.Sno, Sname, Cname, Grade FROM FROM S, SC, C WHEREWHERE S.Sno = SC.Sno AND SC.Cno = C.Cno; 多表查詢嵌套查詢 嵌套查詢概述嵌套查詢概述 嵌套查詢分類嵌套查詢分類 嵌套查詢求解方法嵌套查詢求解方法 引出子查詢的謂詞引出子查詢的謂詞 多表查詢嵌套查詢 嵌套查詢概述嵌套查詢概述 一個SELECT-FROM-WHERE語句稱為一個查詢塊查詢塊 將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢嵌套查詢,或子查詢。多

52、表查詢嵌套查詢嵌套查詢概述嵌套查詢概述 子查詢的限制:子查詢的限制:子查詢的SELECT語句中不能不能使用ORDER BY子句, ORDER BY子句永遠(yuǎn)只能對最終查詢結(jié)果排序。 層層嵌套方式反映了SQL語言的結(jié)構(gòu)化 有些嵌套查詢可以用連接運(yùn)算替代多表查詢嵌套查詢嵌套查詢分類嵌套查詢分類(1 1)不相關(guān)子查詢:)不相關(guān)子查詢:子查詢的查詢條件不依賴于父查詢 (2 2)相關(guān)子查詢:)相關(guān)子查詢:子查詢的查詢條件依賴于父查詢依賴 多表查詢嵌套查詢嵌套查詢的求解方法嵌套查詢的求解方法不相關(guān)子查詢不相關(guān)子查詢是由里向外逐層處理。即每個子查詢在上一級查詢處理之前求解,其的結(jié)果用于建立其父查詢的查找條件。

53、相關(guān)子查詢:相關(guān)子查詢:首先,取外層查詢中表的第一個元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值處理內(nèi)層查詢,若WHERE子句返回值為真,則取此元組放入結(jié)果表;然后,再取外層表的下一個元組;重復(fù)這一過程,直至外層表全部檢查完為止。 多表查詢嵌套查詢引出子查詢的謂詞引出子查詢的謂詞(1) 帶有IN謂詞的子查詢(2) 帶有比較運(yùn)算符的子查詢(3) 帶有ANY或ALL謂詞的子查詢 (4) 帶有EXISTS謂詞的子查詢多表查詢嵌套查詢(1)(1)帶有帶有ININ謂詞的子查詢謂詞的子查詢帶有IN謂詞的子查詢是指父查詢與子查詢之間用IN進(jìn)行連接,用于判斷父查詢的某個屬性列值是否在子查詢的結(jié)果中。 由于在嵌套查詢中,

54、子查詢的結(jié)果往往是一個集合,所以謂詞IN是嵌套查詢中最經(jīng)常使用的謂詞。多表查詢嵌套查詢(2) (2) 帶有比較運(yùn)算符的子查詢帶有比較運(yùn)算符的子查詢 當(dāng)能確切知道內(nèi)層查詢返回單值單值時,可用比較運(yùn)算符:,=,=, !=或。 可與ANY或ALL謂詞配合使用 多表查詢嵌套查詢(3) (3) 帶有帶有ANYANY或或ALLALL謂詞的子查詢謂詞的子查詢 謂詞語義 :ANY:任意一個值 ALL:所有值 使用ANY或ALL時必須同時使用比較運(yùn)算符多表查詢嵌套查詢(3) (3) 帶有帶有ANYANY或或ALLALL謂詞的子查詢謂詞的子查詢 需要配合使用比較運(yùn)算符:需要配合使用比較運(yùn)算符: ANY 大于子查詢

55、結(jié)果中的某個值 ALL 大于子查詢結(jié)果中的所有值 ANY 小于子查詢結(jié)果中的某個值 = ANY 大于等于子查詢結(jié)果中的某個值 = ALL 大于等于子查詢結(jié)果中的所有值 = ANY 小于等于子查詢結(jié)果中的某個值 = ALL 小于等于子查詢結(jié)果中的所有值 = ANY 等于子查詢結(jié)果中的某個值 = ALL 等于子查詢結(jié)果中的所有值(通常沒有實(shí)際意義 ) !=(或)ANY 不等于子查詢結(jié)果中的某個值 !=(或)ALL 不等于子查詢結(jié)果中的任何一個值多表查詢嵌套查詢(3) (3) 帶有帶有ANYANY或或ALLALL謂詞的子查詢謂詞的子查詢 ANY和ALL謂詞有時可以用集函數(shù)實(shí)現(xiàn)ANY和ALL與集函數(shù)的

56、對應(yīng)關(guān)系 多表查詢嵌套查詢(3) (3) 帶有帶有ANYANY或或ALLALL謂詞的子查詢謂詞的子查詢 例: 查詢其他系中比信息系所有學(xué)生年齡都小的學(xué)生姓名及年齡。 方法一:用ALL謂詞 SELECT Sname,Sage FROM SWHERE Sdept IS AND Sage ALL (SELECT Sage FROM S WHERE Sdept=IS) ;多表查詢嵌套查詢(3) (3) 帶有帶有ANYANY或或ALLALL謂詞的子查詢謂詞的子查詢 例: 查詢其他系中比信息系所有學(xué)生年齡都小的學(xué)生姓名及年齡。 方法二:用集函數(shù) SELECT Sname,Sage FROM SWHERE

57、Sdept IS AND Sage (SELECT MIN(Sage) FROM S WHERE Sdept=IS);多表查詢嵌套查詢(4) (4) 帶有帶有EXISTSEXISTS謂詞的子查詢謂詞的子查詢 EXISTS謂詞為存在量詞,帶有EXISTS謂詞的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值“True”或邏輯假值“False”。 若內(nèi)層查詢結(jié)果非空,則返回真值True 若內(nèi)層查詢結(jié)果為空,則返回假值False 由EXISTS引出的子查詢,其目標(biāo)列表達(dá)式 通常都用 * ,因?yàn)閹XISTS的子查詢只返回真值或假值,給出列名無實(shí)際意義。多表查詢嵌套查詢(4) (4) 帶有帶有EXISTSEXIS

58、TS謂詞的子查詢謂詞的子查詢 EXISTSEXISTS謂詞相對應(yīng)的是謂詞相對應(yīng)的是NOT EXISTSNOT EXISTS,使用存在量詞NOT EXISTS: 若內(nèi)層結(jié)果為空,則外層的WHERE條件返回真; 若內(nèi)層結(jié)果為非空,則返回假 不同形式的查詢間的替換不同形式的查詢間的替換 : 一些帶EXISTS或NOT EXISTS謂詞的子查詢不能不能被其他形式的子查詢等價替換。所有帶IN謂詞、比較運(yùn)算符、ANY和ALL謂詞的子查詢都能用帶EXISTS謂詞的子查詢等價替換。 集合查詢 SELECT語句的結(jié)果是一個或一組元組 集合操作種類:集合操作種類: 并操作并操作(UNION) (UNION) 交操

59、作交操作(INTERSECT) (INTERSECT) 差操作差操作(EXCEPT)(EXCEPT) 當(dāng)兩個子查詢結(jié)果的結(jié)構(gòu)完全一致時,可以讓這兩個子查詢執(zhí)行并、交、差操作。 集合查詢對集合操作結(jié)果的排序?qū)喜僮鹘Y(jié)果的排序 ORDER BYORDER BY子句子句只能用于對最終查詢結(jié)果排序,不能對中間結(jié)果排序 任何情況下,ORDER BY子句只能出現(xiàn)在最后 對集合操作結(jié)果排序時,ORDER BY子句中可以用數(shù)字指定排序?qū)傩?集合查詢例:錯誤寫法 SELECT * FROM SWHERE Sdept= CS ORDER BY Sno UNIONUNION SELECT * FROM SWHER

60、E Sage=19 ORDER BY Sno; 集合查詢例:正確寫法 SELECT * FROM SWHERE Sdept= CS UNION UNION SELECT * FROM SWHERE Sage=19 ORDER BY Sno ;小結(jié)SELECTSELECT語句的一般格式語句的一般格式SELECTSELECTALL|DISTINCT ALL|DISTINCT * *|1別名別名 ,2別名別名 FROMFROM 1別名別名 , ,2別名別名 WHEREWHERE GROUP BYGROUP BY 1 HAVINGHAVING ORDER BYORDER BY 2 ASCASC|DES

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論