第五章 數(shù)據(jù)查詢
《第五章 數(shù)據(jù)查詢》由會(huì)員分享,可在線閱讀,更多相關(guān)《第五章 數(shù)據(jù)查詢(54頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第五章第五章第五章第五章數(shù)據(jù)查詢數(shù)據(jù)查詢項(xiàng)目知識(shí)要點(diǎn)與目標(biāo)項(xiàng)目知識(shí)要點(diǎn)與目標(biāo)項(xiàng)目知識(shí)要點(diǎn)項(xiàng)目知識(shí)要點(diǎn)知識(shí)能力目標(biāo)知識(shí)能力目標(biāo)學(xué)時(shí)學(xué)時(shí)任務(wù)任務(wù)1 1 單表查詢單表查詢1 SELECT1 SELECT語(yǔ)句定義語(yǔ)句定義2 2 選擇指定的列選擇指定的列3 WHERE3 WHERE子句子句任務(wù)任務(wù)2 2 多表查詢多表查詢1 FROM1 FROM子句子句2 2 多表連接多表連接任務(wù)任務(wù)3 3 排序與分類匯總排序與分類匯總1 1 聚合函數(shù)聚合函數(shù)2 GROUP BY2 GROUP BY子句子句3 HAVING3 HAVING子句子句4 ORDER BY4 ORDER BY子句子句【典型工作任務(wù)典型工作任務(wù)】
2、單表查詢、多表查詢、子查詢單表查詢、多表查詢、子查詢【技能要求技能要求】1 1 使用使用MySQLMySQL命令完成多功能數(shù)據(jù)命令完成多功能數(shù)據(jù)查詢;查詢;2 2 使用圖形工具完成多功能數(shù)據(jù)查使用圖形工具完成多功能數(shù)據(jù)查詢?cè)儭局R(shí)要求知識(shí)要求】1 1 簡(jiǎn)單查詢、分類匯總簡(jiǎn)單查詢、分類匯總2 2 聯(lián)接和嵌套查詢聯(lián)接和嵌套查詢3 3 數(shù)據(jù)查詢的數(shù)據(jù)查詢的SQLSQL語(yǔ)句語(yǔ)句 6 6項(xiàng)目實(shí)訓(xùn)項(xiàng)目實(shí)訓(xùn)“員工管理系統(tǒng)員工管理系統(tǒng)”數(shù)據(jù)庫(kù)查詢操作數(shù)據(jù)庫(kù)查詢操作6 6單表查詢單表查詢 使用數(shù)據(jù)庫(kù)和表的主要目的是存儲(chǔ)數(shù)據(jù)以便在需要時(shí)進(jìn)行檢使用數(shù)據(jù)庫(kù)和表的主要目的是存儲(chǔ)數(shù)據(jù)以便在需要時(shí)進(jìn)行檢索、統(tǒng)計(jì)或組織輸出,
3、通過(guò)索、統(tǒng)計(jì)或組織輸出,通過(guò)SQLSQL語(yǔ)句的查詢可以從表或視圖中迅語(yǔ)句的查詢可以從表或視圖中迅速方便地檢索數(shù)據(jù)。速方便地檢索數(shù)據(jù)。一、一、SELECTSELECT語(yǔ)句語(yǔ)句 語(yǔ)法格式:語(yǔ)法格式:SELECT ALL|DISTINCT 輸出列表達(dá)式輸出列表達(dá)式,.FROM 表名表名1 ,表名表名2 /*FROM子句子句*/WHERE 條件條件 /*WHERE子句子句*/GROUP BY 列名列名|表達(dá)式表達(dá)式|列編號(hào)列編號(hào) ASC|DESC,./*GROUP BY 子句子句*/HAVING 條件條件 /*HAVING 子句子句*/ORDER BY 列名列名|表達(dá)式表達(dá)式|列編號(hào)列編號(hào) ASC|D
4、ESC,./*ORDER BY子句子句*/LIMIT 偏移量偏移量,行數(shù)行數(shù)|行數(shù)行數(shù)OFFSET偏移量偏移量/*LIMIT子句子句*/順序嚴(yán)格地排序。例如,一個(gè)順序嚴(yán)格地排序。例如,一個(gè)HAVINGHAVING子句必須位于子句必須位于GROUP BYGROUP BY子句之后,子句之后,并位于并位于ORDER BYORDER BY子句之前。子句之前。選擇列選擇列選擇列選擇列1.1.選擇指定的列選擇指定的列使用使用SELECTSELECT語(yǔ)句選擇一個(gè)表中的某些列的語(yǔ)法格式如下語(yǔ)句選擇一個(gè)表中的某些列的語(yǔ)法格式如下:SELECT 字段列表字段列表 FROM 表名表名各列名之各列名之間要以逗號(hào)分隔。
5、間要以逗號(hào)分隔?!纠?.15.1】查詢查詢BookstoreBookstore數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)的MembersMembers表中各會(huì)員的會(huì)員姓名、表中各會(huì)員的會(huì)員姓名、聯(lián)系電話和注冊(cè)時(shí)間。聯(lián)系電話和注冊(cè)時(shí)間。USE Bookstore;SELECT 會(huì)員姓名,聯(lián)系電話,注冊(cè)時(shí)間 FROM Members;說(shuō)明:當(dāng)在說(shuō)明:當(dāng)在SELECTSELECT語(yǔ)句指定列的位置上使用語(yǔ)句指定列的位置上使用*號(hào)時(shí),表示選擇表的所號(hào)時(shí),表示選擇表的所有列,如要顯示有列,如要顯示MembersMembers表中所有列,不必將所有字段名一一列出,使表中所有列,不必將所有字段名一一列出,使用用 SELECT*FROM
6、 Members;列別名列別名2.2.定義列別名定義列別名 當(dāng)希望查詢結(jié)果中的某些列或所有列顯示時(shí)且使用自己選擇的列標(biāo)題當(dāng)希望查詢結(jié)果中的某些列或所有列顯示時(shí)且使用自己選擇的列標(biāo)題時(shí),可以在列名之后使用時(shí),可以在列名之后使用ASAS子句來(lái)更改查詢結(jié)果的列別名。子句來(lái)更改查詢結(jié)果的列別名。語(yǔ)法格式為:語(yǔ)法格式為:SELECT字段列表字段列表 AS 別名別名【例例5.25.2】查詢查詢BookBook表中圖書類別為計(jì)算機(jī)的圖書書名、作者和出版表中圖書類別為計(jì)算機(jī)的圖書書名、作者和出版社,結(jié)果中各列的標(biāo)題分別指定為社,結(jié)果中各列的標(biāo)題分別指定為namename、autherauther和和publi
7、sherpublisher。SELECT 書名 AS name,作者 AS auther,出版社 AS publisher FROM Book WHERE 圖書類別=計(jì)算機(jī);注意:注意:當(dāng)自定義的列標(biāo)題中含有空格時(shí),必須使用引號(hào)將標(biāo)題括起來(lái)。當(dāng)自定義的列標(biāo)題中含有空格時(shí),必須使用引號(hào)將標(biāo)題括起來(lái)。SELECT 圖書編號(hào) AS book number,書名 AS book name,FROM Book WHERE 圖書類別=計(jì)算機(jī);替換查詢結(jié)果中的數(shù)據(jù)替換查詢結(jié)果中的數(shù)據(jù)3.3.替換查詢結(jié)果中的數(shù)據(jù)替換查詢結(jié)果中的數(shù)據(jù)在對(duì)表進(jìn)行查詢時(shí),有時(shí)對(duì)所查詢的某些列希望得到的是一種概念在對(duì)表進(jìn)行查詢時(shí),有
8、時(shí)對(duì)所查詢的某些列希望得到的是一種概念而不是具體的數(shù)據(jù)。例如查詢而不是具體的數(shù)據(jù)。例如查詢XSXS表的總學(xué)分,所希望知道的是學(xué)習(xí)的總表的總學(xué)分,所希望知道的是學(xué)習(xí)的總體情況,這時(shí),就可以用等級(jí)來(lái)替換總學(xué)分的具體數(shù)字。體情況,這時(shí),就可以用等級(jí)來(lái)替換總學(xué)分的具體數(shù)字。要替換查詢結(jié)果中的數(shù)據(jù),則要使用查詢中的要替換查詢結(jié)果中的數(shù)據(jù),則要使用查詢中的CASECASE表達(dá)式,格式為:表達(dá)式,格式為:CASE WHEN 條件條件1 THEN 表達(dá)式表達(dá)式1 WHEN 條件條件2 THEN 表達(dá)式表達(dá)式2 ELSE 表達(dá)式表達(dá)式END【例例5.35.3】查詢查詢BookBook表中圖書編號(hào)、書名和數(shù)量,對(duì)
9、其庫(kù)存數(shù)量按表中圖書編號(hào)、書名和數(shù)量,對(duì)其庫(kù)存數(shù)量按以下規(guī)則進(jìn)行替換:若數(shù)量為空值,替換為以下規(guī)則進(jìn)行替換:若數(shù)量為空值,替換為“尚未進(jìn)貨尚未進(jìn)貨”;若數(shù)量小于;若數(shù)量小于5 5,替換為,替換為“需進(jìn)貨需進(jìn)貨”;若數(shù)量在;若數(shù)量在5-505-50之間,替換為之間,替換為“庫(kù)存正常庫(kù)存正?!?;若總;若總學(xué)分大于學(xué)分大于5050,替換為,替換為“庫(kù)存積壓庫(kù)存積壓”。列標(biāo)題更改為。列標(biāo)題更改為“庫(kù)存庫(kù)存”。SELECT 圖書編號(hào),書名,CASE WHEN 數(shù)量 IS NULL THEN 尚未進(jìn)貨 WHEN 數(shù)量=5 and 數(shù)量=50 THEN 庫(kù)存正常 ELSE 庫(kù)存積壓 END AS 庫(kù)存 FR
10、OM Book;替換查詢結(jié)果舉例替換查詢結(jié)果舉例計(jì)算列值計(jì)算列值4.4.計(jì)算列值計(jì)算列值使用使用SELECTSELECT對(duì)列進(jìn)行查詢時(shí),在結(jié)果中可以輸出對(duì)列值計(jì)算后的值,對(duì)列進(jìn)行查詢時(shí),在結(jié)果中可以輸出對(duì)列值計(jì)算后的值,即即SELECTSELECT子句可使用表達(dá)式作為結(jié)果,格式為:子句可使用表達(dá)式作為結(jié)果,格式為:SELECT 表達(dá)式表達(dá)式1,表達(dá)式表達(dá)式2【例例5.45.4】對(duì)對(duì)SellSell表已發(fā)貨的記錄計(jì)算訂購(gòu)金額(訂購(gòu)金額表已發(fā)貨的記錄計(jì)算訂購(gòu)金額(訂購(gòu)金額=訂購(gòu)冊(cè)訂購(gòu)冊(cè)數(shù)數(shù)*訂購(gòu)單價(jià)),并顯示圖書編號(hào)和訂購(gòu)金額。訂購(gòu)單價(jià)),并顯示圖書編號(hào)和訂購(gòu)金額。SELECT 圖書編號(hào),訂購(gòu)冊(cè)數(shù)
11、*訂購(gòu)單價(jià) AS 訂購(gòu)金額 FROM Sell WHERE 是否發(fā)貨=已發(fā)貨;消除結(jié)果集中的重復(fù)行消除結(jié)果集中的重復(fù)行5.5.消除結(jié)果集中的重復(fù)行消除結(jié)果集中的重復(fù)行 對(duì)表只選擇其某些列時(shí),可能會(huì)出現(xiàn)重復(fù)行。例如,若對(duì)對(duì)表只選擇其某些列時(shí),可能會(huì)出現(xiàn)重復(fù)行。例如,若對(duì)XSCJXSCJ數(shù)數(shù)據(jù)庫(kù)的據(jù)庫(kù)的XSXS表只選擇專業(yè)名和總學(xué)分,則出現(xiàn)多行重復(fù)的情況??梢允贡碇贿x擇專業(yè)名和總學(xué)分,則出現(xiàn)多行重復(fù)的情況??梢允褂糜肈ISTINCTDISTINCT或或DISTINCTROWDISTINCTROW關(guān)鍵字消除結(jié)果集中的重復(fù)行,其格式是:關(guān)鍵字消除結(jié)果集中的重復(fù)行,其格式是:SELECT DISTINC
12、T字段列表字段列表其含義是對(duì)結(jié)果集中的重復(fù)行只選擇一個(gè),保證行的唯一性。其含義是對(duì)結(jié)果集中的重復(fù)行只選擇一個(gè),保證行的唯一性?!纠?.55.5】對(duì)對(duì)BookBook表只選擇圖書類別和出版社,消除結(jié)果集中的表只選擇圖書類別和出版社,消除結(jié)果集中的重復(fù)行。重復(fù)行。SELECT DISTINCT 圖書類別,出版社 FROM Book;WHEREWHEREWHEREWHERE子句子句子句子句WHEREWHERE子句必須緊跟子句必須緊跟FROMFROM子句之后,在子句之后,在WHEREWHERE子句中,使用一個(gè)條件從子句中,使用一個(gè)條件從FROMFROM子句的中間結(jié)果中選取行。其基本格式為:子句的中間
13、結(jié)果中選取行。其基本格式為:WHERE 列名列名 運(yùn)算符運(yùn)算符 值值操操 作作 符符描描 述述=等于等于不等于不等于 大于大于=大于等于大于等于=小于等于小于等于BETWEENBETWEEN在某個(gè)范圍內(nèi)在某個(gè)范圍內(nèi)LIKELIKE搜索某種模式搜索某種模式比較運(yùn)算比較運(yùn)算WHEREWHERE子句會(huì)根據(jù)條件對(duì)子句會(huì)根據(jù)條件對(duì)FROMFROM子句的中間結(jié)果中的行一行一行地進(jìn)行判子句的中間結(jié)果中的行一行一行地進(jìn)行判斷,當(dāng)條件為斷,當(dāng)條件為TRUETRUE的時(shí)候,一行就被包含到的時(shí)候,一行就被包含到WHEREWHERE子句的中間結(jié)果中。子句的中間結(jié)果中。在在SQLSQL中,返回邏輯值(中,返回邏輯值(T
14、RUETRUE或或FALSEFALSE)的運(yùn)算符或關(guān)鍵字都可稱為謂)的運(yùn)算符或關(guān)鍵字都可稱為謂詞。詞。判定運(yùn)算包括比較運(yùn)算、模式匹配、范圍比較、空值比較和子查詢。判定運(yùn)算包括比較運(yùn)算、模式匹配、范圍比較、空值比較和子查詢。1.1.比較運(yùn)算比較運(yùn)算比較運(yùn)算符用于比較(除比較運(yùn)算符用于比較(除TEXTTEXT和和BLOBBLOB類型外類型外)兩個(gè)表達(dá)式值,兩個(gè)表達(dá)式值,MySQLMySQL支支持的比較運(yùn)算符有:持的比較運(yùn)算符有:=(等于)、(等于)、(小于)、(小于)、=(大于)、(大于)、=(大于等于)、(大于等于)、(相等或都等于空)、(相等或都等于空)、(不等于)、(不等于)、!=!=(不等
15、于)。(不等于)。當(dāng)兩個(gè)表達(dá)式值均不為空值(當(dāng)兩個(gè)表達(dá)式值均不為空值(NULLNULL)時(shí),除了)時(shí),除了“”運(yùn)算符,其他比運(yùn)算符,其他比較運(yùn)算返回邏輯值較運(yùn)算返回邏輯值TRUETRUE(真)或(真)或FALSEFALSE(假);而當(dāng)兩個(gè)表達(dá)式值中有一(假);而當(dāng)兩個(gè)表達(dá)式值中有一個(gè)為空值或都為空值時(shí),將返回個(gè)為空值或都為空值時(shí),將返回UNKNOWNUNKNOWN?!纠?.65.6】查詢查詢BookstoreBookstore數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)BookBook表中書名為表中書名為“網(wǎng)頁(yè)程序設(shè)計(jì)網(wǎng)頁(yè)程序設(shè)計(jì)”的記錄。的記錄。SELECT 書名,單價(jià) FROM Book WHERE 書名=網(wǎng)頁(yè)程序設(shè)計(jì)
16、;【例例5.75.7】查詢查詢BookBook表中單價(jià)大于表中單價(jià)大于3030的圖書情況。的圖書情況。SELECT*FROM Book WHERE 單價(jià)30;比較運(yùn)算舉例比較運(yùn)算舉例邏輯運(yùn)算邏輯運(yùn)算通過(guò)邏輯運(yùn)算符(通過(guò)邏輯運(yùn)算符(ANDAND、OROR、XORXOR和和NOTNOT)組成更為復(fù)雜的查詢條件。)組成更為復(fù)雜的查詢條件。邏輯運(yùn)算操作的結(jié)果是邏輯運(yùn)算操作的結(jié)果是“1 1”或或“0 0”,分別表示,分別表示“truetrue”或或“falsefalse”。符號(hào)符號(hào)1 1符號(hào)符號(hào)2 2說(shuō)明說(shuō)明示例示例說(shuō)明說(shuō)明notnot!非運(yùn)算非運(yùn)算!x!x如果x是true,那么示例的結(jié)果是false;
17、如果x是false,那么示例的結(jié)果是true。oror|或運(yùn)算或運(yùn)算x|yx|y如果x或y任一是true,那么示例的結(jié)果是true,否則示例的結(jié)果是false。andand&與運(yùn)算與運(yùn)算x&yx&y如果x和y都是True,那么示例結(jié)果是true,否則示例的結(jié)果是false。xorxor 異或運(yùn)算異或運(yùn)算x yx y如果x和y不相同,那么示例結(jié)果是true,否則示例的結(jié)果是false。邏輯運(yùn)算舉例邏輯運(yùn)算舉例非:select not 0,not 1,not null;或:select(1 or 0),(0 or 0),(1 or null),(1 or 1),(null or null);與:s
18、elect(1 and 1),(0 and 1),(3 and 1),(1 and null);異或:select(1 xor 1),(0 xor 0),(1 xor 0),(0 xor 1),(null xor 1);【例例5.85.8】查詢查詢SellSell表中已收貨且已結(jié)清的訂單情況。表中已收貨且已結(jié)清的訂單情況。SELECT 訂單號(hào),是否收貨,是否結(jié)清 FROM Sell WHERE 是否收貨=已收貨 AND 是否結(jié)清=已結(jié)清;【例例5.95.9】查詢查詢BookBook表中清華大學(xué)出版社和北京大學(xué)出版社出版的價(jià)格大于表中清華大學(xué)出版社和北京大學(xué)出版社出版的價(jià)格大于2525元的圖書。
19、元的圖書。SELECT 書名,出版社,單價(jià) FROM Book WHERE (出版社=清華大學(xué)出版社 OR 出版社=北京大學(xué)出版社)AND 單價(jià)=25;或:SELECT書名,出版社,單價(jià) FROM Book WHERE (出版社=清華大學(xué)出版社 AND 單價(jià)=25)OR (出版社=北京大學(xué)出版社 AND 單價(jià)=25);【思考題思考題】以下語(yǔ)句能否得到正確結(jié)果?為什么?以下語(yǔ)句能否得到正確結(jié)果?為什么?SELECT 書名,出版社,單價(jià) FROM Book WHERE 出版社=清華大學(xué)出版社 OR 出版社=北京大學(xué)出版社 AND 單價(jià)=25;WHERE子句舉例子句舉例LIKELIKE運(yùn)算符運(yùn)算符2
20、.2.模式匹配(模式匹配(LIKELIKE運(yùn)算符)運(yùn)算符)LIKELIKE運(yùn)算符用于指出一個(gè)字符串是否與指定的字符串相匹配,其運(yùn)算運(yùn)算符用于指出一個(gè)字符串是否與指定的字符串相匹配,其運(yùn)算對(duì)象可以是對(duì)象可以是charchar、varcharvarchar、texttext、datetimedatetime等類型的數(shù)據(jù),返回邏輯值等類型的數(shù)據(jù),返回邏輯值TRUETRUE或或FALSEFALSE。使用使用LIKELIKE進(jìn)行模式匹配時(shí),常使用特殊符號(hào)進(jìn)行模式匹配時(shí),常使用特殊符號(hào)_ _和和%,可進(jìn)行模糊查詢。,可進(jìn)行模糊查詢?!?”代表代表0 0個(gè)或多個(gè)字符,個(gè)或多個(gè)字符,“_ _”代表單個(gè)字符。由
21、于代表單個(gè)字符。由于MySQLMySQL默認(rèn)不區(qū)分默認(rèn)不區(qū)分大小寫,要區(qū)分大小寫時(shí)需要更換字符集的校對(duì)規(guī)則。大小寫,要區(qū)分大小寫時(shí)需要更換字符集的校對(duì)規(guī)則?!纠?.105.10】查詢查詢MembersMembers表中姓表中姓“張張”的會(huì)員的身份證號(hào)、姓名及注的會(huì)員的身份證號(hào)、姓名及注冊(cè)時(shí)間。冊(cè)時(shí)間。SELECT 用戶號(hào),會(huì)員姓名,注冊(cè)時(shí)間 FROM Members WHERE 會(huì)員姓名 LIKE 張%;【例例5.115.11】查詢查詢BookBook表中圖書編號(hào)倒數(shù)第二位為表中圖書編號(hào)倒數(shù)第二位為T T的圖書的圖書編號(hào)的圖書的圖書編號(hào)和書名。和書名。SELECT 圖書編號(hào),書名 FROM
22、Book WHERE 圖書編號(hào) LIKE%T_;例例【5.12 5.12】查詢查詢BookBook表中書名中包含下畫線的圖書。表中書名中包含下畫線的圖書。SELECT 圖書編號(hào),書名 FROM Book WHERE 書名 LIKE%#_%ESCAPE#;范圍比較范圍比較3.3.范圍比較范圍比較 用于范圍比較的關(guān)鍵字有兩個(gè):用于范圍比較的關(guān)鍵字有兩個(gè):BETWEENBETWEEN和和ININ。當(dāng)要查詢的條件是某個(gè)值的范圍時(shí),可以使用當(dāng)要查詢的條件是某個(gè)值的范圍時(shí),可以使用BETWEENBETWEEN關(guān)鍵字。關(guān)鍵字。BETWEENBETWEEN關(guān)鍵字指出查詢范圍,格式為:關(guān)鍵字指出查詢范圍,格式為
23、:表達(dá)式表達(dá)式 NOT BETWEEN 表達(dá)式表達(dá)式1 AND 表達(dá)式表達(dá)式2當(dāng)不使用當(dāng)不使用NOTNOT時(shí),若表達(dá)式時(shí),若表達(dá)式expressionexpression的值在表達(dá)式的值在表達(dá)式expression1expression1與與expression2expression2之間(包括這兩個(gè)值),則返回之間(包括這兩個(gè)值),則返回TRUETRUE,否則返回,否則返回FALSEFALSE;使;使用用NOTNOT時(shí),返回值剛好相反。時(shí),返回值剛好相反。注意:注意:expression1expression1的值不能大于的值不能大于expression2expression2的值。的值?!?/p>
24、例例5.135.13】查詢查詢BookBook表中表中20102010年出版的圖書的情況。年出版的圖書的情況。SELECT *FROM Book WHERE 出版時(shí)間 BETWEEN 2010-1-1 AND 2010-12-31;使用使用ININ關(guān)鍵字可以指定一個(gè)值表,值表中列出所有可能的值,當(dāng)與值關(guān)鍵字可以指定一個(gè)值表,值表中列出所有可能的值,當(dāng)與值表中的任一個(gè)匹配時(shí),即返回表中的任一個(gè)匹配時(shí),即返回TRUETRUE,否則返回,否則返回FALSEFALSE。使用使用ININ關(guān)鍵字指定值表的格式為:關(guān)鍵字指定值表的格式為:表達(dá)式表達(dá)式 IN(表達(dá)式表達(dá)式1,n)【例例5.145.14】查詢查
25、詢BookBook表中表中“高等教育出版社高等教育出版社”、“北京大學(xué)出版社北京大學(xué)出版社”和和“人民郵電出版社人民郵電出版社”出版的圖書的情況。出版的圖書的情況。SELECT*FROM Book WHERE 出版社 IN(高等教育出版社,北京大學(xué)出版社,人民郵電出版社);說(shuō)明:說(shuō)明:ININ關(guān)鍵字最主要的作用是表達(dá)子查詢。關(guān)鍵字最主要的作用是表達(dá)子查詢。范圍比較舉例范圍比較舉例空值比較空值比較4.4.空值比較空值比較當(dāng)需要判定一個(gè)表達(dá)式的值是否為空值時(shí),使用當(dāng)需要判定一個(gè)表達(dá)式的值是否為空值時(shí),使用IS NULLIS NULL關(guān)鍵字,格關(guān)鍵字,格式為:式為:表達(dá)式表達(dá)式 IS NOT NUL
26、L當(dāng)不使用當(dāng)不使用NOTNOT時(shí),若表達(dá)式時(shí),若表達(dá)式expressionexpression的值為空值,返回的值為空值,返回TRUETRUE,否則,否則返回返回FALSEFALSE;當(dāng)使用;當(dāng)使用NOTNOT時(shí),結(jié)果剛好相反。時(shí),結(jié)果剛好相反?!纠?.155.15】查詢查詢SellSell表中尚未發(fā)貨的訂單記錄。表中尚未發(fā)貨的訂單記錄。SELECT*FROM Sell WHERE 是否發(fā)貨 IS NULL;本例即查找總學(xué)分為空的學(xué)生,結(jié)果為空。本例即查找總學(xué)分為空的學(xué)生,結(jié)果為空。MySQLMySQL有一個(gè)特殊的等于運(yùn)算符有一個(gè)特殊的等于運(yùn)算符“”,當(dāng)兩個(gè)表達(dá)式彼此相等或都,當(dāng)兩個(gè)表達(dá)式彼
27、此相等或都等于空值時(shí),它的值為等于空值時(shí),它的值為TRUETRUE,其中有一個(gè)空值或都是非空值但不相等,其中有一個(gè)空值或都是非空值但不相等,這個(gè)條件就是這個(gè)條件就是FALSEFALSE?!纠?.165.16】查詢查詢SellSell表中還未收貨的訂單情況。表中還未收貨的訂單情況。SELECT*FROM Sell WHERE 是否收貨NULL;多表查詢多表查詢 前面介紹了使用前面介紹了使用SELECTSELECT子句選擇列,本小節(jié)討論子句選擇列,本小節(jié)討論SELECTSELECT查詢的對(duì)象查詢的對(duì)象(即數(shù)據(jù)源)的構(gòu)成形式。(即數(shù)據(jù)源)的構(gòu)成形式。SELECTSELECT的查詢對(duì)象由的查詢對(duì)象由
28、FROMFROM子句指定,其格式子句指定,其格式為:為:FROM 表名表名1 AS 別名別名1 ,表名表名2 AS 別名別名2 /*查詢表查詢表*/|JOIN子句子句 /*連接表連接表*/引用一個(gè)表:引用一個(gè)表:可以用兩種方式引用一個(gè)表,第一種方式是使用可以用兩種方式引用一個(gè)表,第一種方式是使用USEUSE語(yǔ)句讓一個(gè)數(shù)語(yǔ)句讓一個(gè)數(shù)據(jù)庫(kù)成為當(dāng)前數(shù)據(jù)庫(kù),在這種情況下,如果在據(jù)庫(kù)成為當(dāng)前數(shù)據(jù)庫(kù),在這種情況下,如果在FROMFROM子句中指定表名,則子句中指定表名,則該表應(yīng)該屬于當(dāng)前數(shù)據(jù)庫(kù)。第二種方式是指定的時(shí)候在表名前帶上表所該表應(yīng)該屬于當(dāng)前數(shù)據(jù)庫(kù)。第二種方式是指定的時(shí)候在表名前帶上表所屬數(shù)據(jù)庫(kù)的名
29、字。例如,假設(shè)當(dāng)前數(shù)據(jù)庫(kù)是屬數(shù)據(jù)庫(kù)的名字。例如,假設(shè)當(dāng)前數(shù)據(jù)庫(kù)是db1db1,現(xiàn)在要顯示數(shù)據(jù)庫(kù),現(xiàn)在要顯示數(shù)據(jù)庫(kù)db2db2里的表里的表tbtb的內(nèi)容,使用如下語(yǔ)句:的內(nèi)容,使用如下語(yǔ)句:SELECT *FROM db2.tb;SELECT *FROM db2.tb;當(dāng)然,在當(dāng)然,在SELECTSELECT關(guān)鍵字后指定列名的時(shí)候也可以在列名前帶上所屬關(guān)鍵字后指定列名的時(shí)候也可以在列名前帶上所屬數(shù)據(jù)庫(kù)和表的名字,但是一般來(lái)說(shuō),如果選擇的字段在各表中是唯一的,數(shù)據(jù)庫(kù)和表的名字,但是一般來(lái)說(shuō),如果選擇的字段在各表中是唯一的,就沒(méi)有必要去特別指定。就沒(méi)有必要去特別指定。FROMFROMFROMFROM
30、子句子句子句子句【例例5.175.17】從從MembersMembers表中檢索出所有客戶的信息,并使用表別名表中檢索出所有客戶的信息,并使用表別名UsersUsers。SELECT*FROM Members AS Users;引用多個(gè)表:引用多個(gè)表:如果要在不同表中查詢數(shù)據(jù),則必須在如果要在不同表中查詢數(shù)據(jù),則必須在FROMFROM子句中指定多個(gè)表。指子句中指定多個(gè)表。指定多個(gè)表時(shí)就要使用到連接。當(dāng)不同列的數(shù)據(jù)組合到一個(gè)表中叫做表的定多個(gè)表時(shí)就要使用到連接。當(dāng)不同列的數(shù)據(jù)組合到一個(gè)表中叫做表的連接。例如,在連接。例如,在XSCJXSCJ數(shù)據(jù)庫(kù)中需要查找選修了離散數(shù)學(xué)課程的學(xué)生的姓數(shù)據(jù)庫(kù)中需要
31、查找選修了離散數(shù)學(xué)課程的學(xué)生的姓名和成績(jī),就需要將名和成績(jī),就需要將XSXS、KCKC和和XS_KCXS_KC三個(gè)表進(jìn)行連接,才能查找到結(jié)果。三個(gè)表進(jìn)行連接,才能查找到結(jié)果?!纠?.185.18】查找查找BookstoreBookstore數(shù)據(jù)庫(kù)中客戶訂購(gòu)的圖書書名,訂購(gòu)冊(cè)數(shù)據(jù)庫(kù)中客戶訂購(gòu)的圖書書名,訂購(gòu)冊(cè)數(shù)和訂購(gòu)時(shí)間。數(shù)和訂購(gòu)時(shí)間。SELECT Book.書名,Sell.訂購(gòu)冊(cè)數(shù),Sell.訂購(gòu)時(shí)間 FROM Book,Sell WHERE Book.圖書編號(hào)=Sell.圖書編號(hào);全連接全連接當(dāng)數(shù)據(jù)查詢涉及到多張表格時(shí),要將多張表格的數(shù)據(jù)連接起來(lái)組成當(dāng)數(shù)據(jù)查詢涉及到多張表格時(shí),要將多張表格
32、的數(shù)據(jù)連接起來(lái)組成一張表格,連接的方式有多種。一張表格,連接的方式有多種。1.1.全連接全連接全連接產(chǎn)生的新表是每個(gè)表的每行都與其他表中的每行交叉以產(chǎn)生全連接產(chǎn)生的新表是每個(gè)表的每行都與其他表中的每行交叉以產(chǎn)生所有可能的組合,列包含了所有表中出現(xiàn)的列,也就是笛卡兒積。全連所有可能的組合,列包含了所有表中出現(xiàn)的列,也就是笛卡兒積。全連接可能得到的行數(shù)為每個(gè)表中行數(shù)之積。接可能得到的行數(shù)為每個(gè)表中行數(shù)之積。如表如表A A有有3 3行,表行,表B B有有2 2行,表行,表A A和和B B全連接后得到全連接后得到6 6行(行(3x2=6)3x2=6)的表的表全連接舉例全連接舉例T1T1T2T2T3T3
33、T4T4T5T51 1A A1 13 3M M6 6F F2 20 0N N2 2B BT1T1T2T2T3T3T4T4T5T51 1A A1 13 3M M6 6F F1 13 3M M2 2B B1 13 3M M1 1A A2 20 0N N6 6F F2 20 0N N2 2B B2 20 0M M表表A A和和B B全連接后得到如下全連接后得到如下6 6行(行(3x2=6)3x2=6)的表:的表:表表A A表表B B等值連接等值連接T1T2T3T4T51A13M2B20NFROMFROM子句各個(gè)表用逗號(hào)分隔,這樣就指定了全連接。全連接潛在地子句各個(gè)表用逗號(hào)分隔,這樣就指定了全連接。全
34、連接潛在地產(chǎn)生數(shù)量非常大的行,因?yàn)榭赡艿玫降男袛?shù)為每個(gè)表中行數(shù)之積。在這產(chǎn)生數(shù)量非常大的行,因?yàn)榭赡艿玫降男袛?shù)為每個(gè)表中行數(shù)之積。在這樣的情形下,通常要使用樣的情形下,通常要使用WHEREWHERE子句設(shè)定條件來(lái)將結(jié)果集減少為易于管理子句設(shè)定條件來(lái)將結(jié)果集減少為易于管理的大小,這樣的連接即為等值連接。的大小,這樣的連接即為等值連接。若表若表A A和和B B進(jìn)行等值連接(進(jìn)行等值連接(T1=T3 T1=T3),則如下表所示,只有兩行。),則如下表所示,只有兩行?!纠?.195.19】查找查找BookstoreBookstore數(shù)據(jù)庫(kù)中客戶訂購(gòu)的圖書書名,訂購(gòu)冊(cè)數(shù)據(jù)庫(kù)中客戶訂購(gòu)的圖書書名,訂購(gòu)冊(cè)
35、數(shù)和訂購(gòu)時(shí)間。數(shù)和訂購(gòu)時(shí)間。SELECT Book.書名,Sell.訂購(gòu)冊(cè)數(shù),Sell.訂購(gòu)時(shí)間 FROM Book,Sell WHERE Book.圖書編號(hào)=Sell.圖書編號(hào);JOINJOIN連接連接2.JOIN2.JOIN連接連接 第二種方式是使用第二種方式是使用JOINJOIN關(guān)鍵字的連接,語(yǔ)法格式如下:關(guān)鍵字的連接,語(yǔ)法格式如下:表名表名1 INNER JOIN 表名表名2 ON 條件條件|USING(列名列名)(1 1)內(nèi)連接:指定了)內(nèi)連接:指定了INNER關(guān)鍵字的連接是內(nèi)連接。關(guān)鍵字的連接是內(nèi)連接。【例例5.205.20】要實(shí)現(xiàn)例要實(shí)現(xiàn)例4.234.23中的結(jié)果,可以使用以下語(yǔ)
36、句:中的結(jié)果,可以使用以下語(yǔ)句:SELECT Book.書名,Sell.訂購(gòu)冊(cè)數(shù),Sell.訂購(gòu)時(shí)間 FROM Book inner join Sell ON Book.圖書編號(hào)=Sell.圖書編號(hào);該語(yǔ)句根據(jù)該語(yǔ)句根據(jù)ONON關(guān)鍵字后面的連接條件,合并兩個(gè)表,返回滿足條件的行關(guān)鍵字后面的連接條件,合并兩個(gè)表,返回滿足條件的行。內(nèi)連接是系統(tǒng)默認(rèn)的,可以省略內(nèi)連接是系統(tǒng)默認(rèn)的,可以省略INNERINNER關(guān)鍵字。關(guān)鍵字。使用內(nèi)連接后,使用內(nèi)連接后,F(xiàn)ROMFROM子句中子句中ONON條件主要用來(lái)連接表,其他并不屬于條件主要用來(lái)連接表,其他并不屬于連接表的條件可以使用連接表的條件可以使用WHERE
37、WHERE子句來(lái)指定。子句來(lái)指定。【例例 5.265.26】用用JOINJOIN關(guān)鍵字表達(dá)下列查詢:查找購(gòu)買了關(guān)鍵字表達(dá)下列查詢:查找購(gòu)買了“網(wǎng)頁(yè)程序網(wǎng)頁(yè)程序設(shè)計(jì)設(shè)計(jì)”圖書信息。圖書信息。SELECT 書名,訂購(gòu)冊(cè)數(shù) FROM Book JOIN Sell ON Book.圖書編號(hào)=Sell.圖書編號(hào) WHERE 書名=網(wǎng)頁(yè)程序設(shè)計(jì) ;JOINJOIN連接舉例連接舉例【例例5.215.21】用用JOINJOIN關(guān)鍵字表達(dá)下列查詢:查找訂購(gòu)數(shù)量大于關(guān)鍵字表達(dá)下列查詢:查找訂購(gòu)數(shù)量大于5 5本圖書本圖書和會(huì)員姓名和訂購(gòu)冊(cè)數(shù)。和會(huì)員姓名和訂購(gòu)冊(cè)數(shù)。SELECT 會(huì)員姓名,訂購(gòu)冊(cè)數(shù) FROM Sell
38、 JOIN Members ON Sell.用戶號(hào)=Members.用戶號(hào) WHERE 訂購(gòu)冊(cè)數(shù)5;多表連接舉例多表連接舉例內(nèi)連接還可以用于多個(gè)表的連接。內(nèi)連接還可以用于多個(gè)表的連接。【例例5.225.22】用用JOINJOIN關(guān)鍵字表達(dá)下列查詢:查找購(gòu)買了關(guān)鍵字表達(dá)下列查詢:查找購(gòu)買了“網(wǎng)頁(yè)程序設(shè)網(wǎng)頁(yè)程序設(shè)計(jì)計(jì)”且訂購(gòu)數(shù)量大于且訂購(gòu)數(shù)量大于5 5本的圖書和會(huì)員姓名和訂購(gòu)冊(cè)數(shù)。本的圖書和會(huì)員姓名和訂購(gòu)冊(cè)數(shù)。SELECT Book.圖書編號(hào),會(huì)員姓名,書名,訂購(gòu)冊(cè)數(shù) FROM Sell JOIN Book ON Book.圖書編號(hào)=Sell.圖書編號(hào) JOIN Members ON Sell.身
39、份證號(hào)=Members.身份證號(hào) WHERE 書名=網(wǎng)頁(yè)程序設(shè)計(jì) AND 訂購(gòu)冊(cè)數(shù)5;多表連接舉例多表連接舉例作為特例,可以將一個(gè)表與它自身進(jìn)行連接,稱為自連接。若要在一作為特例,可以將一個(gè)表與它自身進(jìn)行連接,稱為自連接。若要在一個(gè)表中查找具有相同列值的行,則可以使用自連接。使用自連接時(shí)需為個(gè)表中查找具有相同列值的行,則可以使用自連接。使用自連接時(shí)需為表指定兩個(gè)別名,且對(duì)所有列的引用均要用別名限定。表指定兩個(gè)別名,且對(duì)所有列的引用均要用別名限定?!纠?.235.23】查找查找BookStoreBookStore數(shù)據(jù)庫(kù)中訂單不同、圖書編號(hào)相同的圖書數(shù)據(jù)庫(kù)中訂單不同、圖書編號(hào)相同的圖書的訂單號(hào)、
40、圖書編號(hào)和訂購(gòu)冊(cè)數(shù)。的訂單號(hào)、圖書編號(hào)和訂購(gòu)冊(cè)數(shù)。SELECT a.訂單號(hào),a.圖書編號(hào),a.訂購(gòu)冊(cè)數(shù) FROM Sell AS a JOIN Sell AS b ON a.圖書編號(hào)=b.圖書編號(hào) where a.訂單號(hào)!=b.訂單號(hào);自表連接自表連接 如果要連接的表中有列名相同,并且連接的條件就是列名相等,那如果要連接的表中有列名相同,并且連接的條件就是列名相等,那么么ONON條件也可以換成條件也可以換成USINGUSING子句。子句。USINGUSING(column_listcolumn_list)子句用于為一)子句用于為一系列的列進(jìn)行命名。這些列必須同時(shí)在兩個(gè)表中存在。其中系列的列進(jìn)行
41、命名。這些列必須同時(shí)在兩個(gè)表中存在。其中column_listcolumn_list為兩表中相同的列名。為兩表中相同的列名?!纠?.245.24】查找查找MembersMembers表中所有訂購(gòu)過(guò)圖書的會(huì)員姓名。表中所有訂購(gòu)過(guò)圖書的會(huì)員姓名。SELECT Distinct 會(huì)員姓名 FROM Members JOIN Sell USING(用戶號(hào));查詢的結(jié)果為查詢的結(jié)果為SellSell表中所有出現(xiàn)的身份證號(hào)對(duì)應(yīng)的會(huì)員姓名。表中所有出現(xiàn)的身份證號(hào)對(duì)應(yīng)的會(huì)員姓名。例例5.245.24的語(yǔ)句與下列語(yǔ)句等價(jià):的語(yǔ)句與下列語(yǔ)句等價(jià):SELECT Distinct 會(huì)員姓名 FROM Members
42、 JOIN Sell ON Members.用戶號(hào)=Sell.用戶號(hào);USINGUSING子句子句多表查詢多表查詢對(duì)對(duì)YGGLYGGL數(shù)據(jù)庫(kù)完成多表查詢:數(shù)據(jù)庫(kù)完成多表查詢:1 1、查詢每個(gè)雇員的基本情況和薪水情況、查詢每個(gè)雇員的基本情況和薪水情況2 2、查詢、查詢“王林王林”的基本情況和所工作的部門名稱的基本情況和所工作的部門名稱3 3、查詢?cè)率杖朐?、查詢?cè)率杖朐?000300020003000元的員工姓名和支出元的員工姓名和支出4 4、查詢研發(fā)部在、查詢研發(fā)部在19701970年以前出生的員工姓名和薪水情況年以前出生的員工姓名和薪水情況外連接外連接 指定了指定了OUTEROUTER關(guān)鍵字的
43、連接為外連接。關(guān)鍵字的連接為外連接。外連接包括:外連接包括:左外連接(左外連接(LEFT OUTER JOINLEFT OUTER JOIN):):結(jié)果表中除了匹配行外,還包括左表有的但右表中不匹配的行,結(jié)果表中除了匹配行外,還包括左表有的但右表中不匹配的行,對(duì)于這樣的行,從右表被選擇的列設(shè)置為對(duì)于這樣的行,從右表被選擇的列設(shè)置為NULLNULL。右外連接(右外連接(RIGHT OUTER JOINRIGHT OUTER JOIN):):結(jié)果表中除了匹配行外,還包括右表有的但左表中不匹配的行,結(jié)果表中除了匹配行外,還包括右表有的但左表中不匹配的行,對(duì)于這樣的行,從左表被選擇的列設(shè)置為對(duì)于這樣的
44、行,從左表被選擇的列設(shè)置為NULLNULL。左外連接舉例左外連接舉例T1T1T2T2T3T3T4T4T5T51 1A A1 13 3M M6 6F F2 20 0N N2 2B BT1T1T2T2T3T3T4T4T5T51 1A A1 13 3M M6 6F FNULLNULLNULLNULLNULLNULL2 2B B2 20 0N NFrom A left join B on T1=T3From A left join B on T1=T3:表表A A表表B B外連接舉例外連接舉例【例例5.255.25】查找所有圖書的圖書編號(hào)、數(shù)量及訂購(gòu)了圖書的會(huì)員身查找所有圖書的圖書編號(hào)、數(shù)量及訂購(gòu)了圖
45、書的會(huì)員身份證號(hào),若從未訂購(gòu)過(guò),也要包括其情況。份證號(hào),若從未訂購(gòu)過(guò),也要包括其情況。SELECT Book.圖書編號(hào),Book.數(shù)量,身份證號(hào) FROM Book LEFT OUTER JOIN Sell ON Book.圖書編號(hào)=Sell.圖書編號(hào);【例例5.265.26】查找訂購(gòu)了圖書的會(huì)員的訂單號(hào)、圖書編號(hào)和訂購(gòu)冊(cè)數(shù)查找訂購(gòu)了圖書的會(huì)員的訂單號(hào)、圖書編號(hào)和訂購(gòu)冊(cè)數(shù)以及所有會(huì)員的會(huì)員姓名。以及所有會(huì)員的會(huì)員姓名。SELECT 訂單號(hào),圖書編號(hào),訂購(gòu)冊(cè)數(shù),Members.會(huì)員姓名 FROM Sell RIGHT JOIN Members ON Members.用戶號(hào)=Sell.用戶號(hào);子查
46、詢子查詢 在查詢條件中,可以使用另一個(gè)查詢的結(jié)果作為條件的一部分,在查詢條件中,可以使用另一個(gè)查詢的結(jié)果作為條件的一部分,例如,判定列值是否與某個(gè)查詢的結(jié)果集中的值相等,作為查詢條例如,判定列值是否與某個(gè)查詢的結(jié)果集中的值相等,作為查詢條件一部分的查詢稱為子查詢。件一部分的查詢稱為子查詢。SQLSQL標(biāo)準(zhǔn)允許標(biāo)準(zhǔn)允許SELECTSELECT多層嵌套使用,用多層嵌套使用,用來(lái)表示復(fù)雜的查詢。子查詢除了可以用在來(lái)表示復(fù)雜的查詢。子查詢除了可以用在SELECTSELECT語(yǔ)句中,還可以用語(yǔ)句中,還可以用在在INSERTINSERT、UPDATEUPDATE及及DELETEDELETE語(yǔ)句中。語(yǔ)句中。
47、子查詢通常與子查詢通常與ININ、EXISTEXIST謂詞及比較運(yùn)算符結(jié)合使用。謂詞及比較運(yùn)算符結(jié)合使用。(1 1)ININ子查詢子查詢 IN IN子查詢用于進(jìn)行一個(gè)給定值是否在子查詢結(jié)果集中的判斷,子查詢用于進(jìn)行一個(gè)給定值是否在子查詢結(jié)果集中的判斷,格式為:格式為:expressionexpression NOT IN NOT IN (subquery)(subquery)其中,其中,subquerysubquery是子查詢。當(dāng)表達(dá)式是子查詢。當(dāng)表達(dá)式expressionexpression與子查詢與子查詢subquerysubquery的結(jié)果表中的某個(gè)值相等時(shí),的結(jié)果表中的某個(gè)值相等時(shí),I
48、NIN謂詞返回謂詞返回TRUETRUE,否則返回,否則返回FALSEFALSE;若;若使用了使用了NOTNOT,則返回的值剛好相反。,則返回的值剛好相反。子查詢舉例子查詢舉例【例例5.275.27】查找在查找在BookstoreBookstore數(shù)據(jù)庫(kù)中張三的訂單信息。數(shù)據(jù)庫(kù)中張三的訂單信息。SELECT*FROM Sell WHERE 用戶號(hào) IN(SELECT 用戶號(hào) FROM Members WHERE 會(huì)員姓名=張三);說(shuō)明:在執(zhí)行包含子查詢的說(shuō)明:在執(zhí)行包含子查詢的SELECTSELECT語(yǔ)句時(shí),系統(tǒng)先執(zhí)行子查詢,產(chǎn)語(yǔ)句時(shí),系統(tǒng)先執(zhí)行子查詢,產(chǎn)生一個(gè)結(jié)果表,再執(zhí)行查詢。生一個(gè)結(jié)果表,
49、再執(zhí)行查詢。本例中,先執(zhí)行子查詢:本例中,先執(zhí)行子查詢:SELECT 用戶號(hào) FROM Members WHERE 會(huì)員姓名=張三 得到一個(gè)只含有身份證號(hào)列的表。再執(zhí)行外查詢,若得到一個(gè)只含有身份證號(hào)列的表。再執(zhí)行外查詢,若SellSell表中某行表中某行的身份證號(hào)列值等于子查詢結(jié)果表中的任一個(gè)值,則該行就被選擇。的身份證號(hào)列值等于子查詢結(jié)果表中的任一個(gè)值,則該行就被選擇。子查詢嵌套舉例子查詢嵌套舉例ININ子查詢只能返回一列數(shù)據(jù)。對(duì)于較復(fù)雜的查詢,可以使用嵌套子查詢只能返回一列數(shù)據(jù)。對(duì)于較復(fù)雜的查詢,可以使用嵌套的子查詢。的子查詢?!纠?.285.28】查找購(gòu)買了除查找購(gòu)買了除“網(wǎng)頁(yè)程序設(shè)
50、計(jì)網(wǎng)頁(yè)程序設(shè)計(jì)”以外圖書的會(huì)員信息。以外圖書的會(huì)員信息。要查找會(huì)員信息,先要知道會(huì)員的身份證號(hào),而要知道購(gòu)買了除要查找會(huì)員信息,先要知道會(huì)員的身份證號(hào),而要知道購(gòu)買了除“網(wǎng)頁(yè)程序設(shè)計(jì)網(wǎng)頁(yè)程序設(shè)計(jì)”以外圖書的會(huì)員,可以按圖書編號(hào)在以外圖書的會(huì)員,可以按圖書編號(hào)在SellSell表中表中查到,但是查到,但是“網(wǎng)頁(yè)程序設(shè)計(jì)網(wǎng)頁(yè)程序設(shè)計(jì)”的圖書編號(hào)要通過(guò)查找的圖書編號(hào)要通過(guò)查找BookBook才可以才可以獲得。獲得。SELECT*FROM Members WHERE 用戶號(hào) IN (SELECT 用戶號(hào) FROM Sell WHERE 圖書編號(hào) NOT IN (SELECT 圖書編號(hào) FROM Boo
51、k WHERE 書名=網(wǎng)頁(yè)程序設(shè)計(jì));比較子查詢比較子查詢這種子查詢可以認(rèn)為是這種子查詢可以認(rèn)為是ININ子查詢的擴(kuò)展,它使表達(dá)式的值與子查詢的結(jié)子查詢的擴(kuò)展,它使表達(dá)式的值與子查詢的結(jié)果進(jìn)行比較運(yùn)算。其格式如下:果進(jìn)行比較運(yùn)算。其格式如下:表達(dá)式表達(dá)式|=|!=|ALL|SOME|ANY|=|!=|ALL|SOME|ANY (子查詢子查詢)【例【例5.295.29】查找查找BookBook表中所有比表中所有比“網(wǎng)頁(yè)設(shè)計(jì)網(wǎng)頁(yè)設(shè)計(jì)”類圖書價(jià)格都高的類圖書價(jià)格都高的圖書基圖書基本信息。本信息。SELECT 圖書編號(hào),圖書類別,單價(jià) FROM Book WHERE 單價(jià)ALL(SELECT 單價(jià) F
52、ROM Book WHERE 圖書類別=網(wǎng)頁(yè)設(shè)計(jì));比較子查詢比較子查詢【例5.30】查找Sell表中訂購(gòu)冊(cè)數(shù)不低于編號(hào)為 TP7/301-135 的任何一個(gè)訂單的訂購(gòu)冊(cè)數(shù)的訂單信息。SELECT 圖書編號(hào),訂購(gòu)冊(cè)數(shù) FROM Sell WHERE 訂購(gòu)冊(cè)數(shù)SOME (SELECT 訂購(gòu)冊(cè)數(shù) FROM Sell WHERE 圖書編號(hào)=TP7/301-135 );外連接與子查詢外連接與子查詢一、對(duì)一、對(duì)YGGLYGGL數(shù)據(jù)庫(kù)完成多表查詢:數(shù)據(jù)庫(kù)完成多表查詢:1 1、使用左外連接顯示員工表中員工基本信息和所在部門的部門名稱、使用左外連接顯示員工表中員工基本信息和所在部門的部門名稱二、使用子查詢完成
53、:二、使用子查詢完成:2 2、查找工資收入大于、查找工資收入大于20002000元的員工的基本信息元的員工的基本信息3 3、查找在財(cái)務(wù)部工作的員工的基本信息、查找在財(cái)務(wù)部工作的員工的基本信息4 4、查找住在、查找住在“中山中山”的員工的工作部門名稱的員工的工作部門名稱聚合函數(shù)聚合函數(shù)聚合函數(shù)聚合函數(shù)SELECTSELECT子句的表達(dá)式中還可以包含所謂的聚合函數(shù)。聚合函數(shù)常子句的表達(dá)式中還可以包含所謂的聚合函數(shù)。聚合函數(shù)常常用于對(duì)一組值進(jìn)行計(jì)算,然后返回單個(gè)值。常用于對(duì)一組值進(jìn)行計(jì)算,然后返回單個(gè)值。函函 數(shù)數(shù) 名名說(shuō)說(shuō) 明明COUNTCOUNT求組中項(xiàng)數(shù),返回求組中項(xiàng)數(shù),返回intint類型整
54、數(shù)類型整數(shù)MAXMAX求最大值求最大值MINMIN求最小值求最小值SUMSUM返回表達(dá)式中所有值的和返回表達(dá)式中所有值的和AVGAVG求組中值的平均值求組中值的平均值COUNTCOUNT函數(shù)函數(shù)函數(shù)函數(shù)(1 1)COUNTCOUNT函數(shù)函數(shù)聚合函數(shù)中最經(jīng)常使用的是聚合函數(shù)中最經(jīng)常使用的是COUNT()COUNT()函數(shù),用于統(tǒng)計(jì)組中滿足條件函數(shù),用于統(tǒng)計(jì)組中滿足條件的行數(shù)或總行數(shù),返回的行數(shù)或總行數(shù),返回SELECTSELECT語(yǔ)句檢索到的行中非語(yǔ)句檢索到的行中非NULLNULL值的數(shù)目,若值的數(shù)目,若找不到匹配的行,則返回找不到匹配的行,則返回0 0。語(yǔ)法格式為:語(yǔ)法格式為:COUNT(AL
55、L|DISTINCT 表達(dá)式表達(dá)式|*)其中,其中,表達(dá)式1是一個(gè)表達(dá)式,其數(shù)據(jù)類型是除是一個(gè)表達(dá)式,其數(shù)據(jù)類型是除BLOBBLOB或或TEXTTEXT之外的之外的任何類型。任何類型。ALLALL表示對(duì)所有值進(jìn)行運(yùn)算,表示對(duì)所有值進(jìn)行運(yùn)算,DISTINCTDISTINCT表示去除重復(fù)值,表示去除重復(fù)值,默認(rèn)為默認(rèn)為ALLALL。使用。使用COUNT(*)COUNT(*)時(shí)將返回檢索行的總數(shù)目,不論其是否包時(shí)將返回檢索行的總數(shù)目,不論其是否包含含 NULLNULL值。值?!纠?.315.31】求會(huì)員總?cè)藬?shù)。求會(huì)員總?cè)藬?shù)。SELECT COUNT(*)AS 會(huì)員數(shù) FROM Members;【例
56、例5.325.32】統(tǒng)計(jì)已結(jié)清的訂單數(shù)。統(tǒng)計(jì)已結(jié)清的訂單數(shù)。SELECT COUNT(是否結(jié)清)AS 已結(jié)清的訂單數(shù) FROM Sell;注意:注意:這里這里COUNT(COUNT(是否結(jié)清是否結(jié)清)只統(tǒng)計(jì)是否結(jié)清列中不為只統(tǒng)計(jì)是否結(jié)清列中不為NULLNULL的行。的行?!纠?.335.33】統(tǒng)計(jì)訂購(gòu)冊(cè)數(shù)在統(tǒng)計(jì)訂購(gòu)冊(cè)數(shù)在5 5以上的訂單數(shù)。以上的訂單數(shù)。SELECT COUNT(訂購(gòu)冊(cè)數(shù))AS 訂購(gòu)冊(cè)數(shù)在5以上的訂單數(shù) FROM Sell WHERE 訂購(gòu)冊(cè)數(shù)5;COUNT函數(shù)舉例函數(shù)舉例MAXMAX和和MINMIN函數(shù)函數(shù)函數(shù)函數(shù)(2 2)MAXMAX和和MINMINMAXMAX和和MIN
57、MIN分別用于求表達(dá)式中所有值項(xiàng)的最大值與最小值,語(yǔ)法格分別用于求表達(dá)式中所有值項(xiàng)的最大值與最小值,語(yǔ)法格式為:式為:MAX/MIN(ALL|DISTINCT 表達(dá)式)其中,其中,expressionexpression是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型可以是是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型可以是數(shù)字、字符和時(shí)間日期數(shù)字、字符和時(shí)間日期 類型。類型。【例例5.355.35】求訂購(gòu)了圖書編號(hào)為求訂購(gòu)了圖書編號(hào)為TP7/301-135的訂單的最高訂購(gòu)的訂單的最高訂購(gòu)冊(cè)數(shù)和最低訂購(gòu)冊(cè)數(shù)。冊(cè)數(shù)和最低訂購(gòu)冊(cè)數(shù)。SELECT MAX(訂購(gòu)冊(cè)數(shù)),MIN(訂購(gòu)冊(cè)數(shù))FROM Sell WHERE 圖書
58、編號(hào)=TP7/301-135;注意:注意:當(dāng)給定列上只有空值或檢索出的中間結(jié)果為空時(shí),當(dāng)給定列上只有空值或檢索出的中間結(jié)果為空時(shí),MAXMAX和和MINMIN函數(shù)的值也為空。函數(shù)的值也為空。SUMSUM函數(shù)和函數(shù)和AVGAVG函數(shù)函數(shù)(3 3)SUMSUM函數(shù)和函數(shù)和AVGAVG函數(shù)函數(shù)SUMSUM和和AVGAVG分別用于求表達(dá)式中所有值項(xiàng)的總和與平均值,語(yǔ)法格式為:分別用于求表達(dá)式中所有值項(xiàng)的總和與平均值,語(yǔ)法格式為:SUM/AVG(ALL|DISTINCT 表達(dá)式)其中,其中,expressionexpression是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型只能是數(shù)值型。是常量、列、函數(shù)或表達(dá)式
59、,其數(shù)據(jù)類型只能是數(shù)值型?!纠?.365.36】求訂購(gòu)了圖書編號(hào)為求訂購(gòu)了圖書編號(hào)為TP7/301-135圖書的訂購(gòu)總冊(cè)數(shù)。圖書的訂購(gòu)總冊(cè)數(shù)。SELECT SUM(訂購(gòu)冊(cè)數(shù))AS 訂購(gòu)總冊(cè)數(shù) FROM Sell WHERE 圖書編號(hào)=TP7/301-135;【例例5.375.37】求訂購(gòu)圖書編號(hào)為求訂購(gòu)圖書編號(hào)為TP7/301-135圖書的訂單平均冊(cè)數(shù)。圖書的訂單平均冊(cè)數(shù)。SELECT AVG(訂購(gòu)冊(cè)數(shù))AS 每筆訂單平均冊(cè)數(shù) FROM Sell WHERE 圖書編號(hào)=TP7/301-135;任務(wù)三任務(wù)三任務(wù)三任務(wù)三 分類匯總與排序分類匯總與排序分類匯總與排序分類匯總與排序 GROUP BY
60、GROUP BY子句主要用于根據(jù)字段對(duì)行分組。例如,根據(jù)學(xué)生所學(xué)子句主要用于根據(jù)字段對(duì)行分組。例如,根據(jù)學(xué)生所學(xué)的專業(yè)對(duì)的專業(yè)對(duì)XSXS表中的所有行分組,結(jié)果是每個(gè)專業(yè)的學(xué)生成為一組。表中的所有行分組,結(jié)果是每個(gè)專業(yè)的學(xué)生成為一組。GROUP BYGROUP BY子句的語(yǔ)法格式如下:子句的語(yǔ)法格式如下:GROUP BY 列名列名|表達(dá)式表達(dá)式 ASC|DESC,.WITH ROLLUPGROUP BYGROUP BY子句后通常包含列名或表達(dá)式。子句后通常包含列名或表達(dá)式。MySQLMySQL對(duì)對(duì)GROUP BYGROUP BY子句子句進(jìn)行了擴(kuò)展,可以在列的后面指定進(jìn)行了擴(kuò)展,可以在列的后面指定
61、ASCASC(升序)或(升序)或DESCDESC(降序)。(降序)。GROUP BYGROUP BY可以根據(jù)一個(gè)或多個(gè)列進(jìn)行分組,也可以根據(jù)表達(dá)式進(jìn)行可以根據(jù)一個(gè)或多個(gè)列進(jìn)行分組,也可以根據(jù)表達(dá)式進(jìn)行分組,經(jīng)常和聚合函數(shù)一起使用。分組,經(jīng)常和聚合函數(shù)一起使用?!纠纠?.385.38】輸出輸出BookBook表中圖書類別名。表中圖書類別名。SELECT 圖書類別 FROM Book GROUP BY 圖書類別;【例【例5.395.39】按圖書類別統(tǒng)計(jì)按圖書類別統(tǒng)計(jì)BookBook表中各類圖書的庫(kù)存數(shù)。表中各類圖書的庫(kù)存數(shù)。SELECT 圖書類別,COUNT(*)AS 庫(kù)存數(shù) FROM Book
62、 GROUP BY 圖書類別;【例【例5.405.40】按圖書編號(hào)分類統(tǒng)計(jì)其訂單數(shù)和訂單的平均訂購(gòu)冊(cè)數(shù)。按圖書編號(hào)分類統(tǒng)計(jì)其訂單數(shù)和訂單的平均訂購(gòu)冊(cè)數(shù)。SELECT 圖書編號(hào),AVG(訂購(gòu)冊(cè)數(shù))AS 訂購(gòu)冊(cè)數(shù),COUNT(訂單號(hào))AS 訂單數(shù) FROM Sell GROUP BY 圖書編號(hào);帶帶帶帶ROLLUPROLLUP的的的的GROUP BYGROUP BY子句子句子句子句 使用帶使用帶ROLLUPROLLUP操作符的操作符的GROUP BYGROUP BY子句,可指定在結(jié)果集內(nèi)不僅子句,可指定在結(jié)果集內(nèi)不僅包含由包含由 GROUP BY GROUP BY 提供的正常行,還包含匯總行。提供
63、的正常行,還包含匯總行。【例例5.415.41】按圖書類別、出版社分類統(tǒng)計(jì)按圖書類別、出版社分類統(tǒng)計(jì)BookBook表中各類圖書的庫(kù)存表中各類圖書的庫(kù)存數(shù)。數(shù)。SELECT 圖書類別,出版社,Sum(數(shù)量)AS 庫(kù)存數(shù) FROM Book GROUP BY 圖書類別,出版社;請(qǐng)將執(zhí)行結(jié)果與以下語(yǔ)句比較:請(qǐng)將執(zhí)行結(jié)果與以下語(yǔ)句比較:SELECT 圖書類別,出版社,Sum(數(shù)量)AS 庫(kù)存數(shù) FROM Book GROUP BY 圖書類別,出版社 WITH ROLLUP;HAVINGHAVINGHAVINGHAVING子句子句子句子句使用使用HAVINGHAVING子句的目的與子句的目的與WHER
64、EWHERE子句類似,不同的是子句類似,不同的是WHEREWHERE子句子句是用來(lái)在是用來(lái)在FROMFROM子句之后選擇行,而子句之后選擇行,而HAVINGHAVING子句用來(lái)在子句用來(lái)在GROUP BYGROUP BY子句子句后選擇行。后選擇行。語(yǔ)法格式:語(yǔ)法格式:HAVING 條件條件其中,其中,條件條件的定義和的定義和WHEREWHERE子句中的條件類似,不過(guò)子句中的條件類似,不過(guò)HAVINGHAVING子子句中的條件可以包含聚合函數(shù),而句中的條件可以包含聚合函數(shù),而WHEREWHERE子句中則不可以。子句中則不可以。SQLSQL標(biāo)準(zhǔn)要求標(biāo)準(zhǔn)要求HAVINGHAVING必須引用必須引用G
65、ROUP BYGROUP BY子句中的列或用于聚合子句中的列或用于聚合函數(shù)中的列。不過(guò),函數(shù)中的列。不過(guò),MySQLMySQL支持對(duì)此工作性質(zhì)的擴(kuò)展,并允許支持對(duì)此工作性質(zhì)的擴(kuò)展,并允許HAVINGHAVING引用引用SELECTSELECT清單中的列和外部子查詢中的列。清單中的列和外部子查詢中的列。HAVINGHAVINGHAVINGHAVING子句舉例子句舉例子句舉例子句舉例【例例5.425.42】查找查找SellSell表中每個(gè)會(huì)員平均訂購(gòu)冊(cè)數(shù)在表中每個(gè)會(huì)員平均訂購(gòu)冊(cè)數(shù)在1010本以上的本以上的會(huì)員的用戶號(hào)和平均訂購(gòu)冊(cè)數(shù)。會(huì)員的用戶號(hào)和平均訂購(gòu)冊(cè)數(shù)。SELECT 用戶號(hào),AVG(訂購(gòu)冊(cè)數(shù)
66、)AS 平均訂購(gòu)冊(cè)數(shù) FROM Sell GROUP BY 用戶號(hào) HAVING AVG(訂購(gòu)冊(cè)數(shù))10;【例例5.435.43】查找查找SellSell表中會(huì)員訂單數(shù)在表中會(huì)員訂單數(shù)在2 2筆以上且每筆訂購(gòu)冊(cè)數(shù)筆以上且每筆訂購(gòu)冊(cè)數(shù)都在都在5 5本以上的會(huì)員。本以上的會(huì)員。SELECT 用戶號(hào),AVG(訂購(gòu)冊(cè)數(shù))FROM Sell WHERE 訂購(gòu)冊(cè)數(shù) 5 GROUP BY 用戶號(hào) HAVING COUNT(*)2;ORDER BY子句子句在一條在一條SELECTSELECT語(yǔ)句中,如果不使用語(yǔ)句中,如果不使用ORDER BYORDER BY子句,結(jié)果中行的順子句,結(jié)果中行的順序是不可預(yù)料的。使用序是不可預(yù)料的。使用ORDER BYORDER BY子句后可以保證結(jié)果中的行按一定順子句后可以保證結(jié)果中的行按一定順序排列。序排列。語(yǔ)法格式:語(yǔ)法格式:ORDER BY 列名列名|表達(dá)式表達(dá)式|列編號(hào)列編號(hào) ASC|DESC,.說(shuō)明:說(shuō)明:ORDER BYORDER BY子句后可以是一個(gè)列、一個(gè)表達(dá)式或一個(gè)正整數(shù)。子句后可以是一個(gè)列、一個(gè)表達(dá)式或一個(gè)正整數(shù)。正整數(shù)表示按結(jié)果表中該位置上的列排序
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點(diǎn)美食推薦
- XX國(guó)有企業(yè)黨委書記個(gè)人述責(zé)述廉報(bào)告及2025年重點(diǎn)工作計(jì)劃
- 世界濕地日濕地的含義及價(jià)值
- 20XX年春節(jié)節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)人到場(chǎng)心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫之美生活之美
- 節(jié)后開(kāi)工第一課輕松掌握各要點(diǎn)節(jié)后常見(jiàn)的八大危險(xiǎn)
- 廈門城市旅游介紹廈門景點(diǎn)介紹廈門美食展示
- 節(jié)后開(kāi)工第一課復(fù)工復(fù)產(chǎn)十注意節(jié)后復(fù)工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓(xùn)
- 深圳城市旅游介紹景點(diǎn)推薦美食探索
- 節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)勿忘安全本心人人講安全個(gè)個(gè)會(huì)應(yīng)急
- 預(yù)防性維修管理
- 常見(jiàn)閥門類型及特點(diǎn)
- 設(shè)備預(yù)防性維修
- 2.乳化液泵工理論考試試題含答案