九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

第五章 數(shù)據(jù)查詢

上傳人:等** 文檔編號:240471506 上傳時間:2024-04-11 格式:PPT 頁數(shù):54 大?。?.04MB
收藏 版權(quán)申訴 舉報 下載
第五章 數(shù)據(jù)查詢_第1頁
第1頁 / 共54頁
第五章 數(shù)據(jù)查詢_第2頁
第2頁 / 共54頁
第五章 數(shù)據(jù)查詢_第3頁
第3頁 / 共54頁

下載文檔到電腦,查找使用更方便

12 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《第五章 數(shù)據(jù)查詢》由會員分享,可在線閱讀,更多相關(guān)《第五章 數(shù)據(jù)查詢(54頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第五章第五章第五章第五章數(shù)據(jù)查詢數(shù)據(jù)查詢項目知識要點與目標(biāo)項目知識要點與目標(biāo)項目知識要點項目知識要點知識能力目標(biāo)知識能力目標(biāo)學(xué)時學(xué)時任務(wù)任務(wù)1 1 單表查詢單表查詢1 SELECT1 SELECT語句定義語句定義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ù)查詢詢【知識要求知識要求】1 1 簡單查詢、分類匯總簡單查詢、分類匯總2 2 聯(lián)接和嵌套查詢聯(lián)接和嵌套查詢3 3 數(shù)據(jù)查詢的數(shù)據(jù)查詢的SQLSQL語句語句 6 6項目實訓(xùn)項目實訓(xùn)“員工管理系統(tǒng)員工管理系統(tǒng)”數(shù)據(jù)庫查詢操作數(shù)據(jù)庫查詢操作6 6單表查詢單表查詢 使用數(shù)據(jù)庫和表的主要目的是存儲數(shù)據(jù)以便在需要時進(jìn)行檢使用數(shù)據(jù)庫和表的主要目的是存儲數(shù)據(jù)以便在需要時進(jìn)行檢索、統(tǒng)計或組織輸出,

3、通過索、統(tǒng)計或組織輸出,通過SQLSQL語句的查詢可以從表或視圖中迅語句的查詢可以從表或視圖中迅速方便地檢索數(shù)據(jù)。速方便地檢索數(shù)據(jù)。一、一、SELECTSELECT語句語句 語法格式:語法格式:SELECT ALL|DISTINCT 輸出列表達(dá)式輸出列表達(dá)式,.FROM 表名表名1 ,表名表名2 /*FROM子句子句*/WHERE 條件條件 /*WHERE子句子句*/GROUP BY 列名列名|表達(dá)式表達(dá)式|列編號列編號 ASC|DESC,./*GROUP BY 子句子句*/HAVING 條件條件 /*HAVING 子句子句*/ORDER BY 列名列名|表達(dá)式表達(dá)式|列編號列編號 ASC|D

4、ESC,./*ORDER BY子句子句*/LIMIT 偏移量偏移量,行數(shù)行數(shù)|行數(shù)行數(shù)OFFSET偏移量偏移量/*LIMIT子句子句*/順序嚴(yán)格地排序。例如,一個順序嚴(yán)格地排序。例如,一個HAVINGHAVING子句必須位于子句必須位于GROUP BYGROUP BY子句之后,子句之后,并位于并位于ORDER BYORDER BY子句之前。子句之前。選擇列選擇列選擇列選擇列1.1.選擇指定的列選擇指定的列使用使用SELECTSELECT語句選擇一個表中的某些列的語法格式如下語句選擇一個表中的某些列的語法格式如下:SELECT 字段列表字段列表 FROM 表名表名各列名之各列名之間要以逗號分隔。

5、間要以逗號分隔?!纠?.15.1】查詢查詢BookstoreBookstore數(shù)據(jù)庫的數(shù)據(jù)庫的MembersMembers表中各會員的會員姓名、表中各會員的會員姓名、聯(lián)系電話和注冊時間。聯(lián)系電話和注冊時間。USE Bookstore;SELECT 會員姓名,聯(lián)系電話,注冊時間 FROM Members;說明:當(dāng)在說明:當(dāng)在SELECTSELECT語句指定列的位置上使用語句指定列的位置上使用*號時,表示選擇表的所號時,表示選擇表的所有列,如要顯示有列,如要顯示MembersMembers表中所有列,不必將所有字段名一一列出,使表中所有列,不必將所有字段名一一列出,使用用 SELECT*FROM

6、 Members;列別名列別名2.2.定義列別名定義列別名 當(dāng)希望查詢結(jié)果中的某些列或所有列顯示時且使用自己選擇的列標(biāo)題當(dāng)希望查詢結(jié)果中的某些列或所有列顯示時且使用自己選擇的列標(biāo)題時,可以在列名之后使用時,可以在列名之后使用ASAS子句來更改查詢結(jié)果的列別名。子句來更改查詢結(jié)果的列別名。語法格式為:語法格式為:SELECT字段列表字段列表 AS 別名別名【例例5.25.2】查詢查詢BookBook表中圖書類別為計算機(jī)的圖書書名、作者和出版表中圖書類別為計算機(jī)的圖書書名、作者和出版社,結(jié)果中各列的標(biāo)題分別指定為社,結(jié)果中各列的標(biāo)題分別指定為namename、autherauther和和publi

7、sherpublisher。SELECT 書名 AS name,作者 AS auther,出版社 AS publisher FROM Book WHERE 圖書類別=計算機(jī);注意:注意:當(dāng)自定義的列標(biāo)題中含有空格時,必須使用引號將標(biāo)題括起來。當(dāng)自定義的列標(biāo)題中含有空格時,必須使用引號將標(biāo)題括起來。SELECT 圖書編號 AS book number,書名 AS book name,FROM Book WHERE 圖書類別=計算機(jī);替換查詢結(jié)果中的數(shù)據(jù)替換查詢結(jié)果中的數(shù)據(jù)3.3.替換查詢結(jié)果中的數(shù)據(jù)替換查詢結(jié)果中的數(shù)據(jù)在對表進(jìn)行查詢時,有時對所查詢的某些列希望得到的是一種概念在對表進(jìn)行查詢時,有

8、時對所查詢的某些列希望得到的是一種概念而不是具體的數(shù)據(jù)。例如查詢而不是具體的數(shù)據(jù)。例如查詢XSXS表的總學(xué)分,所希望知道的是學(xué)習(xí)的總表的總學(xué)分,所希望知道的是學(xué)習(xí)的總體情況,這時,就可以用等級來替換總學(xué)分的具體數(shù)字。體情況,這時,就可以用等級來替換總學(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表中圖書編號、書名和數(shù)量,對

9、其庫存數(shù)量按表中圖書編號、書名和數(shù)量,對其庫存數(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之間,替換為之間,替換為“庫存正常庫存正?!保蝗艨?;若總學(xué)分大于學(xué)分大于5050,替換為,替換為“庫存積壓庫存積壓”。列標(biāo)題更改為。列標(biāo)題更改為“庫存庫存”。SELECT 圖書編號,書名,CASE WHEN 數(shù)量 IS NULL THEN 尚未進(jìn)貨 WHEN 數(shù)量=5 and 數(shù)量=50 THEN 庫存正常 ELSE 庫存積壓 END AS 庫存 FR

10、OM Book;替換查詢結(jié)果舉例替換查詢結(jié)果舉例計算列值計算列值4.4.計算列值計算列值使用使用SELECTSELECT對列進(jìn)行查詢時,在結(jié)果中可以輸出對列值計算后的值,對列進(jìn)行查詢時,在結(jié)果中可以輸出對列值計算后的值,即即SELECTSELECT子句可使用表達(dá)式作為結(jié)果,格式為:子句可使用表達(dá)式作為結(jié)果,格式為:SELECT 表達(dá)式表達(dá)式1,表達(dá)式表達(dá)式2【例例5.45.4】對對SellSell表已發(fā)貨的記錄計算訂購金額(訂購金額表已發(fā)貨的記錄計算訂購金額(訂購金額=訂購冊訂購冊數(shù)數(shù)*訂購單價),并顯示圖書編號和訂購金額。訂購單價),并顯示圖書編號和訂購金額。SELECT 圖書編號,訂購冊數(shù)

11、*訂購單價 AS 訂購金額 FROM Sell WHERE 是否發(fā)貨=已發(fā)貨;消除結(jié)果集中的重復(fù)行消除結(jié)果集中的重復(fù)行5.5.消除結(jié)果集中的重復(fù)行消除結(jié)果集中的重復(fù)行 對表只選擇其某些列時,可能會出現(xiàn)重復(fù)行。例如,若對對表只選擇其某些列時,可能會出現(xiàn)重復(fù)行。例如,若對XSCJXSCJ數(shù)數(shù)據(jù)庫的據(jù)庫的XSXS表只選擇專業(yè)名和總學(xué)分,則出現(xiàn)多行重復(fù)的情況??梢允贡碇贿x擇專業(yè)名和總學(xué)分,則出現(xiàn)多行重復(fù)的情況。可以使用用DISTINCTDISTINCT或或DISTINCTROWDISTINCTROW關(guān)鍵字消除結(jié)果集中的重復(fù)行,其格式是:關(guān)鍵字消除結(jié)果集中的重復(fù)行,其格式是:SELECT DISTINC

12、T字段列表字段列表其含義是對結(jié)果集中的重復(fù)行只選擇一個,保證行的唯一性。其含義是對結(jié)果集中的重復(fù)行只選擇一個,保證行的唯一性?!纠?.55.5】對對BookBook表只選擇圖書類別和出版社,消除結(jié)果集中的表只選擇圖書類別和出版社,消除結(jié)果集中的重復(fù)行。重復(fù)行。SELECT DISTINCT 圖書類別,出版社 FROM Book;WHEREWHEREWHEREWHERE子句子句子句子句WHEREWHERE子句必須緊跟子句必須緊跟FROMFROM子句之后,在子句之后,在WHEREWHERE子句中,使用一個條件從子句中,使用一個條件從FROMFROM子句的中間結(jié)果中選取行。其基本格式為:子句的中間

13、結(jié)果中選取行。其基本格式為:WHERE 列名列名 運(yùn)算符運(yùn)算符 值值操操 作作 符符描描 述述=等于等于不等于不等于 大于大于=大于等于大于等于=小于等于小于等于BETWEENBETWEEN在某個范圍內(nèi)在某個范圍內(nèi)LIKELIKE搜索某種模式搜索某種模式比較運(yùn)算比較運(yùn)算WHEREWHERE子句會根據(jù)條件對子句會根據(jù)條件對FROMFROM子句的中間結(jié)果中的行一行一行地進(jìn)行判子句的中間結(jié)果中的行一行一行地進(jìn)行判斷,當(dāng)條件為斷,當(dāng)條件為TRUETRUE的時候,一行就被包含到的時候,一行就被包含到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類型外類型外)兩個表達(dá)式值,兩個表達(dá)式值,MySQLMySQL支支持的比較運(yùn)算符有:持的比較運(yùn)算符有:=(等于)、(等于)、(小于)、(小于)、=(大于)、(大于)、=(大于等于)、(大于等于)、(相等或都等于空)、(相等或都等于空)、(不等于)、(不等于)、!=!=(不等

15、于)。(不等于)。當(dāng)兩個表達(dá)式值均不為空值(當(dāng)兩個表達(dá)式值均不為空值(NULLNULL)時,除了)時,除了“”運(yùn)算符,其他比運(yùn)算符,其他比較運(yùn)算返回邏輯值較運(yùn)算返回邏輯值TRUETRUE(真)或(真)或FALSEFALSE(假);而當(dāng)兩個表達(dá)式值中有一(假);而當(dāng)兩個表達(dá)式值中有一個為空值或都為空值時,將返回個為空值或都為空值時,將返回UNKNOWNUNKNOWN。【例例5.65.6】查詢查詢BookstoreBookstore數(shù)據(jù)庫數(shù)據(jù)庫BookBook表中書名為表中書名為“網(wǎng)頁程序設(shè)計網(wǎng)頁程序設(shè)計”的記錄。的記錄。SELECT 書名,單價 FROM Book WHERE 書名=網(wǎng)頁程序設(shè)計

16、;【例例5.75.7】查詢查詢BookBook表中單價大于表中單價大于3030的圖書情況。的圖書情況。SELECT*FROM Book WHERE 單價30;比較運(yùn)算舉例比較運(yùn)算舉例邏輯運(yùn)算邏輯運(yùn)算通過邏輯運(yùn)算符(通過邏輯運(yùn)算符(ANDAND、OROR、XORXOR和和NOTNOT)組成更為復(fù)雜的查詢條件。)組成更為復(fù)雜的查詢條件。邏輯運(yùn)算操作的結(jié)果是邏輯運(yùn)算操作的結(jié)果是“1 1”或或“0 0”,分別表示,分別表示“truetrue”或或“falsefalse”。符號符號1 1符號符號2 2說明說明示例示例說明說明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 訂單號,是否收貨,是否結(jié)清 FROM Sell WHERE 是否收貨=已收貨 AND 是否結(jié)清=已結(jié)清;【例例5.95.9】查詢查詢BookBook表中清華大學(xué)出版社和北京大學(xué)出版社出版的價格大于表中清華大學(xué)出版社和北京大學(xué)出版社出版的價格大于2525元的圖書。

19、元的圖書。SELECT 書名,出版社,單價 FROM Book WHERE (出版社=清華大學(xué)出版社 OR 出版社=北京大學(xué)出版社)AND 單價=25;或:SELECT書名,出版社,單價 FROM Book WHERE (出版社=清華大學(xué)出版社 AND 單價=25)OR (出版社=北京大學(xué)出版社 AND 單價=25);【思考題思考題】以下語句能否得到正確結(jié)果?為什么?以下語句能否得到正確結(jié)果?為什么?SELECT 書名,出版社,單價 FROM Book WHERE 出版社=清華大學(xué)出版社 OR 出版社=北京大學(xué)出版社 AND 單價=25;WHERE子句舉例子句舉例LIKELIKE運(yùn)算符運(yùn)算符2

20、.2.模式匹配(模式匹配(LIKELIKE運(yùn)算符)運(yùn)算符)LIKELIKE運(yùn)算符用于指出一個字符串是否與指定的字符串相匹配,其運(yùn)算運(yùn)算符用于指出一個字符串是否與指定的字符串相匹配,其運(yùn)算對象可以是對象可以是charchar、varcharvarchar、texttext、datetimedatetime等類型的數(shù)據(jù),返回邏輯值等類型的數(shù)據(jù),返回邏輯值TRUETRUE或或FALSEFALSE。使用使用LIKELIKE進(jìn)行模式匹配時,常使用特殊符號進(jìn)行模式匹配時,常使用特殊符號_ _和和%,可進(jìn)行模糊查詢。,可進(jìn)行模糊查詢?!?”代表代表0 0個或多個字符,個或多個字符,“_ _”代表單個字符。由

21、于代表單個字符。由于MySQLMySQL默認(rèn)不區(qū)分默認(rèn)不區(qū)分大小寫,要區(qū)分大小寫時需要更換字符集的校對規(guī)則。大小寫,要區(qū)分大小寫時需要更換字符集的校對規(guī)則?!纠?.105.10】查詢查詢MembersMembers表中姓表中姓“張張”的會員的身份證號、姓名及注的會員的身份證號、姓名及注冊時間。冊時間。SELECT 用戶號,會員姓名,注冊時間 FROM Members WHERE 會員姓名 LIKE 張%;【例例5.115.11】查詢查詢BookBook表中圖書編號倒數(shù)第二位為表中圖書編號倒數(shù)第二位為T T的圖書的圖書編號的圖書的圖書編號和書名。和書名。SELECT 圖書編號,書名 FROM

22、Book WHERE 圖書編號 LIKE%T_;例例【5.12 5.12】查詢查詢BookBook表中書名中包含下畫線的圖書。表中書名中包含下畫線的圖書。SELECT 圖書編號,書名 FROM Book WHERE 書名 LIKE%#_%ESCAPE#;范圍比較范圍比較3.3.范圍比較范圍比較 用于范圍比較的關(guān)鍵字有兩個:用于范圍比較的關(guān)鍵字有兩個:BETWEENBETWEEN和和ININ。當(dāng)要查詢的條件是某個值的范圍時,可以使用當(dāng)要查詢的條件是某個值的范圍時,可以使用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時,若表達(dá)式時,若表達(dá)式expressionexpression的值在表達(dá)式的值在表達(dá)式expression1expression1與與expression2expression2之間(包括這兩個值),則返回之間(包括這兩個值),則返回TRUETRUE,否則返回,否則返回FALSEFALSE;使;使用用NOTNOT時,返回值剛好相反。時,返回值剛好相反。注意:注意:expression1expression1的值不能大于的值不能大于expression2expression2的值。的值?!?/p>

24、例例5.135.13】查詢查詢BookBook表中表中20102010年出版的圖書的情況。年出版的圖書的情況。SELECT *FROM Book WHERE 出版時間 BETWEEN 2010-1-1 AND 2010-12-31;使用使用ININ關(guān)鍵字可以指定一個值表,值表中列出所有可能的值,當(dāng)與值關(guān)鍵字可以指定一個值表,值表中列出所有可能的值,當(dāng)與值表中的任一個匹配時,即返回表中的任一個匹配時,即返回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é)出版社,人民郵電出版社);說明:說明:ININ關(guān)鍵字最主要的作用是表達(dá)子查詢。關(guān)鍵字最主要的作用是表達(dá)子查詢。范圍比較舉例范圍比較舉例空值比較空值比較4.4.空值比較空值比較當(dāng)需要判定一個表達(dá)式的值是否為空值時,使用當(dāng)需要判定一個表達(dá)式的值是否為空值時,使用IS NULLIS NULL關(guān)鍵字,格關(guān)鍵字,格式為:式為:表達(dá)式表達(dá)式 IS NOT NUL

26、L當(dāng)不使用當(dāng)不使用NOTNOT時,若表達(dá)式時,若表達(dá)式expressionexpression的值為空值,返回的值為空值,返回TRUETRUE,否則,否則返回返回FALSEFALSE;當(dāng)使用;當(dāng)使用NOTNOT時,結(jié)果剛好相反。時,結(jié)果剛好相反?!纠?.155.15】查詢查詢SellSell表中尚未發(fā)貨的訂單記錄。表中尚未發(fā)貨的訂單記錄。SELECT*FROM Sell WHERE 是否發(fā)貨 IS NULL;本例即查找總學(xué)分為空的學(xué)生,結(jié)果為空。本例即查找總學(xué)分為空的學(xué)生,結(jié)果為空。MySQLMySQL有一個特殊的等于運(yùn)算符有一個特殊的等于運(yùn)算符“”,當(dāng)兩個表達(dá)式彼此相等或都,當(dāng)兩個表達(dá)式彼

27、此相等或都等于空值時,它的值為等于空值時,它的值為TRUETRUE,其中有一個空值或都是非空值但不相等,其中有一個空值或都是非空值但不相等,這個條件就是這個條件就是FALSEFALSE。【例例5.165.16】查詢查詢SellSell表中還未收貨的訂單情況。表中還未收貨的訂單情況。SELECT*FROM Sell WHERE 是否收貨NULL;多表查詢多表查詢 前面介紹了使用前面介紹了使用SELECTSELECT子句選擇列,本小節(jié)討論子句選擇列,本小節(jié)討論SELECTSELECT查詢的對象查詢的對象(即數(shù)據(jù)源)的構(gòu)成形式。(即數(shù)據(jù)源)的構(gòu)成形式。SELECTSELECT的查詢對象由的查詢對象由

28、FROMFROM子句指定,其格式子句指定,其格式為:為:FROM 表名表名1 AS 別名別名1 ,表名表名2 AS 別名別名2 /*查詢表查詢表*/|JOIN子句子句 /*連接表連接表*/引用一個表:引用一個表:可以用兩種方式引用一個表,第一種方式是使用可以用兩種方式引用一個表,第一種方式是使用USEUSE語句讓一個數(shù)語句讓一個數(shù)據(jù)庫成為當(dāng)前數(shù)據(jù)庫,在這種情況下,如果在據(jù)庫成為當(dāng)前數(shù)據(jù)庫,在這種情況下,如果在FROMFROM子句中指定表名,則子句中指定表名,則該表應(yīng)該屬于當(dāng)前數(shù)據(jù)庫。第二種方式是指定的時候在表名前帶上表所該表應(yīng)該屬于當(dāng)前數(shù)據(jù)庫。第二種方式是指定的時候在表名前帶上表所屬數(shù)據(jù)庫的名

29、字。例如,假設(shè)當(dāng)前數(shù)據(jù)庫是屬數(shù)據(jù)庫的名字。例如,假設(shè)當(dāng)前數(shù)據(jù)庫是db1db1,現(xiàn)在要顯示數(shù)據(jù)庫,現(xiàn)在要顯示數(shù)據(jù)庫db2db2里的表里的表tbtb的內(nèi)容,使用如下語句:的內(nèi)容,使用如下語句:SELECT *FROM db2.tb;SELECT *FROM db2.tb;當(dāng)然,在當(dāng)然,在SELECTSELECT關(guān)鍵字后指定列名的時候也可以在列名前帶上所屬關(guān)鍵字后指定列名的時候也可以在列名前帶上所屬數(shù)據(jù)庫和表的名字,但是一般來說,如果選擇的字段在各表中是唯一的,數(shù)據(jù)庫和表的名字,但是一般來說,如果選擇的字段在各表中是唯一的,就沒有必要去特別指定。就沒有必要去特別指定。FROMFROMFROMFROM

30、子句子句子句子句【例例5.175.17】從從MembersMembers表中檢索出所有客戶的信息,并使用表別名表中檢索出所有客戶的信息,并使用表別名UsersUsers。SELECT*FROM Members AS Users;引用多個表:引用多個表:如果要在不同表中查詢數(shù)據(jù),則必須在如果要在不同表中查詢數(shù)據(jù),則必須在FROMFROM子句中指定多個表。指子句中指定多個表。指定多個表時就要使用到連接。當(dāng)不同列的數(shù)據(jù)組合到一個表中叫做表的定多個表時就要使用到連接。當(dāng)不同列的數(shù)據(jù)組合到一個表中叫做表的連接。例如,在連接。例如,在XSCJXSCJ數(shù)據(jù)庫中需要查找選修了離散數(shù)學(xué)課程的學(xué)生的姓數(shù)據(jù)庫中需要

31、查找選修了離散數(shù)學(xué)課程的學(xué)生的姓名和成績,就需要將名和成績,就需要將XSXS、KCKC和和XS_KCXS_KC三個表進(jìn)行連接,才能查找到結(jié)果。三個表進(jìn)行連接,才能查找到結(jié)果。【例例5.185.18】查找查找BookstoreBookstore數(shù)據(jù)庫中客戶訂購的圖書書名,訂購冊數(shù)據(jù)庫中客戶訂購的圖書書名,訂購冊數(shù)和訂購時間。數(shù)和訂購時間。SELECT Book.書名,Sell.訂購冊數(shù),Sell.訂購時間 FROM Book,Sell WHERE Book.圖書編號=Sell.圖書編號;全連接全連接當(dāng)數(shù)據(jù)查詢涉及到多張表格時,要將多張表格的數(shù)據(jù)連接起來組成當(dāng)數(shù)據(jù)查詢涉及到多張表格時,要將多張表格

32、的數(shù)據(jù)連接起來組成一張表格,連接的方式有多種。一張表格,連接的方式有多種。1.1.全連接全連接全連接產(chǎn)生的新表是每個表的每行都與其他表中的每行交叉以產(chǎn)生全連接產(chǎn)生的新表是每個表的每行都與其他表中的每行交叉以產(chǎn)生所有可能的組合,列包含了所有表中出現(xiàn)的列,也就是笛卡兒積。全連所有可能的組合,列包含了所有表中出現(xiàn)的列,也就是笛卡兒積。全連接可能得到的行數(shù)為每個表中行數(shù)之積。接可能得到的行數(shù)為每個表中行數(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子句各個表用逗號分隔,這樣就指定了全連接。全連接潛在地子句各個表用逗號分隔,這樣就指定了全連接。全

34、連接潛在地產(chǎn)生數(shù)量非常大的行,因為可能得到的行數(shù)為每個表中行數(shù)之積。在這產(chǎn)生數(shù)量非常大的行,因為可能得到的行數(shù)為每個表中行數(shù)之積。在這樣的情形下,通常要使用樣的情形下,通常要使用WHEREWHERE子句設(shè)定條件來將結(jié)果集減少為易于管理子句設(shè)定條件來將結(jié)果集減少為易于管理的大小,這樣的連接即為等值連接。的大小,這樣的連接即為等值連接。若表若表A A和和B B進(jìn)行等值連接(進(jìn)行等值連接(T1=T3 T1=T3),則如下表所示,只有兩行。),則如下表所示,只有兩行。【例例5.195.19】查找查找BookstoreBookstore數(shù)據(jù)庫中客戶訂購的圖書書名,訂購冊數(shù)據(jù)庫中客戶訂購的圖書書名,訂購冊

35、數(shù)和訂購時間。數(shù)和訂購時間。SELECT Book.書名,Sell.訂購冊數(shù),Sell.訂購時間 FROM Book,Sell WHERE Book.圖書編號=Sell.圖書編號;JOINJOIN連接連接2.JOIN2.JOIN連接連接 第二種方式是使用第二種方式是使用JOINJOIN關(guān)鍵字的連接,語法格式如下:關(guān)鍵字的連接,語法格式如下:表名表名1 INNER JOIN 表名表名2 ON 條件條件|USING(列名列名)(1 1)內(nèi)連接:指定了)內(nèi)連接:指定了INNER關(guān)鍵字的連接是內(nèi)連接。關(guān)鍵字的連接是內(nèi)連接。【例例5.205.20】要實現(xiàn)例要實現(xiàn)例4.234.23中的結(jié)果,可以使用以下語

36、句:中的結(jié)果,可以使用以下語句:SELECT Book.書名,Sell.訂購冊數(shù),Sell.訂購時間 FROM Book inner join Sell ON Book.圖書編號=Sell.圖書編號;該語句根據(jù)該語句根據(jù)ONON關(guān)鍵字后面的連接條件,合并兩個表,返回滿足條件的行關(guān)鍵字后面的連接條件,合并兩個表,返回滿足條件的行。內(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條件主要用來連接表,其他并不屬于條件主要用來連接表,其他并不屬于連接表的條件可以使用連接表的條件可以使用WHERE

37、WHERE子句來指定。子句來指定?!纠?5.265.26】用用JOINJOIN關(guān)鍵字表達(dá)下列查詢:查找購買了關(guān)鍵字表達(dá)下列查詢:查找購買了“網(wǎng)頁程序網(wǎng)頁程序設(shè)計設(shè)計”圖書信息。圖書信息。SELECT 書名,訂購冊數(shù) FROM Book JOIN Sell ON Book.圖書編號=Sell.圖書編號 WHERE 書名=網(wǎng)頁程序設(shè)計 ;JOINJOIN連接舉例連接舉例【例例5.215.21】用用JOINJOIN關(guān)鍵字表達(dá)下列查詢:查找訂購數(shù)量大于關(guān)鍵字表達(dá)下列查詢:查找訂購數(shù)量大于5 5本圖書本圖書和會員姓名和訂購冊數(shù)。和會員姓名和訂購冊數(shù)。SELECT 會員姓名,訂購冊數(shù) FROM Sell

38、 JOIN Members ON Sell.用戶號=Members.用戶號 WHERE 訂購冊數(shù)5;多表連接舉例多表連接舉例內(nèi)連接還可以用于多個表的連接。內(nèi)連接還可以用于多個表的連接。【例例5.225.22】用用JOINJOIN關(guān)鍵字表達(dá)下列查詢:查找購買了關(guān)鍵字表達(dá)下列查詢:查找購買了“網(wǎng)頁程序設(shè)網(wǎng)頁程序設(shè)計計”且訂購數(shù)量大于且訂購數(shù)量大于5 5本的圖書和會員姓名和訂購冊數(shù)。本的圖書和會員姓名和訂購冊數(shù)。SELECT Book.圖書編號,會員姓名,書名,訂購冊數(shù) FROM Sell JOIN Book ON Book.圖書編號=Sell.圖書編號 JOIN Members ON Sell.身

39、份證號=Members.身份證號 WHERE 書名=網(wǎng)頁程序設(shè)計 AND 訂購冊數(shù)5;多表連接舉例多表連接舉例作為特例,可以將一個表與它自身進(jìn)行連接,稱為自連接。若要在一作為特例,可以將一個表與它自身進(jìn)行連接,稱為自連接。若要在一個表中查找具有相同列值的行,則可以使用自連接。使用自連接時需為個表中查找具有相同列值的行,則可以使用自連接。使用自連接時需為表指定兩個別名,且對所有列的引用均要用別名限定。表指定兩個別名,且對所有列的引用均要用別名限定?!纠?.235.23】查找查找BookStoreBookStore數(shù)據(jù)庫中訂單不同、圖書編號相同的圖書數(shù)據(jù)庫中訂單不同、圖書編號相同的圖書的訂單號、

40、圖書編號和訂購冊數(shù)。的訂單號、圖書編號和訂購冊數(shù)。SELECT a.訂單號,a.圖書編號,a.訂購冊數(shù) FROM Sell AS a JOIN Sell AS b ON a.圖書編號=b.圖書編號 where a.訂單號!=b.訂單號;自表連接自表連接 如果要連接的表中有列名相同,并且連接的條件就是列名相等,那如果要連接的表中有列名相同,并且連接的條件就是列名相等,那么么ONON條件也可以換成條件也可以換成USINGUSING子句。子句。USINGUSING(column_listcolumn_list)子句用于為一)子句用于為一系列的列進(jìn)行命名。這些列必須同時在兩個表中存在。其中系列的列進(jìn)行

41、命名。這些列必須同時在兩個表中存在。其中column_listcolumn_list為兩表中相同的列名。為兩表中相同的列名?!纠?.245.24】查找查找MembersMembers表中所有訂購過圖書的會員姓名。表中所有訂購過圖書的會員姓名。SELECT Distinct 會員姓名 FROM Members JOIN Sell USING(用戶號);查詢的結(jié)果為查詢的結(jié)果為SellSell表中所有出現(xiàn)的身份證號對應(yīng)的會員姓名。表中所有出現(xiàn)的身份證號對應(yīng)的會員姓名。例例5.245.24的語句與下列語句等價:的語句與下列語句等價:SELECT Distinct 會員姓名 FROM Members

42、 JOIN Sell ON Members.用戶號=Sell.用戶號;USINGUSING子句子句多表查詢多表查詢對對YGGLYGGL數(shù)據(jù)庫完成多表查詢:數(shù)據(jù)庫完成多表查詢:1 1、查詢每個雇員的基本情況和薪水情況、查詢每個雇員的基本情況和薪水情況2 2、查詢、查詢“王林王林”的基本情況和所工作的部門名稱的基本情況和所工作的部門名稱3 3、查詢月收入在、查詢月收入在2000300020003000元的員工姓名和支出元的員工姓名和支出4 4、查詢研發(fā)部在、查詢研發(fā)部在19701970年以前出生的員工姓名和薪水情況年以前出生的員工姓名和薪水情況外連接外連接 指定了指定了OUTEROUTER關(guān)鍵字的

43、連接為外連接。關(guān)鍵字的連接為外連接。外連接包括:外連接包括:左外連接(左外連接(LEFT OUTER JOINLEFT OUTER JOIN):):結(jié)果表中除了匹配行外,還包括左表有的但右表中不匹配的行,結(jié)果表中除了匹配行外,還包括左表有的但右表中不匹配的行,對于這樣的行,從右表被選擇的列設(shè)置為對于這樣的行,從右表被選擇的列設(shè)置為NULLNULL。右外連接(右外連接(RIGHT OUTER JOINRIGHT OUTER JOIN):):結(jié)果表中除了匹配行外,還包括右表有的但左表中不匹配的行,結(jié)果表中除了匹配行外,還包括右表有的但左表中不匹配的行,對于這樣的行,從左表被選擇的列設(shè)置為對于這樣的

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】查找所有圖書的圖書編號、數(shù)量及訂購了圖書的會員身查找所有圖書的圖書編號、數(shù)量及訂購了圖

45、書的會員身份證號,若從未訂購過,也要包括其情況。份證號,若從未訂購過,也要包括其情況。SELECT Book.圖書編號,Book.數(shù)量,身份證號 FROM Book LEFT OUTER JOIN Sell ON Book.圖書編號=Sell.圖書編號;【例例5.265.26】查找訂購了圖書的會員的訂單號、圖書編號和訂購冊數(shù)查找訂購了圖書的會員的訂單號、圖書編號和訂購冊數(shù)以及所有會員的會員姓名。以及所有會員的會員姓名。SELECT 訂單號,圖書編號,訂購冊數(shù),Members.會員姓名 FROM Sell RIGHT JOIN Members ON Members.用戶號=Sell.用戶號;子查

46、詢子查詢 在查詢條件中,可以使用另一個查詢的結(jié)果作為條件的一部分,在查詢條件中,可以使用另一個查詢的結(jié)果作為條件的一部分,例如,判定列值是否與某個查詢的結(jié)果集中的值相等,作為查詢條例如,判定列值是否與某個查詢的結(jié)果集中的值相等,作為查詢條件一部分的查詢稱為子查詢。件一部分的查詢稱為子查詢。SQLSQL標(biāo)準(zhǔn)允許標(biāo)準(zhǔn)允許SELECTSELECT多層嵌套使用,用多層嵌套使用,用來表示復(fù)雜的查詢。子查詢除了可以用在來表示復(fù)雜的查詢。子查詢除了可以用在SELECTSELECT語句中,還可以用語句中,還可以用在在INSERTINSERT、UPDATEUPDATE及及DELETEDELETE語句中。語句中。

47、子查詢通常與子查詢通常與ININ、EXISTEXIST謂詞及比較運(yùn)算符結(jié)合使用。謂詞及比較運(yùn)算符結(jié)合使用。(1 1)ININ子查詢子查詢 IN IN子查詢用于進(jìn)行一個給定值是否在子查詢結(jié)果集中的判斷,子查詢用于進(jìn)行一個給定值是否在子查詢結(jié)果集中的判斷,格式為:格式為:expressionexpression NOT IN NOT IN (subquery)(subquery)其中,其中,subquerysubquery是子查詢。當(dāng)表達(dá)式是子查詢。當(dāng)表達(dá)式expressionexpression與子查詢與子查詢subquerysubquery的結(jié)果表中的某個值相等時,的結(jié)果表中的某個值相等時,I

48、NIN謂詞返回謂詞返回TRUETRUE,否則返回,否則返回FALSEFALSE;若;若使用了使用了NOTNOT,則返回的值剛好相反。,則返回的值剛好相反。子查詢舉例子查詢舉例【例例5.275.27】查找在查找在BookstoreBookstore數(shù)據(jù)庫中張三的訂單信息。數(shù)據(jù)庫中張三的訂單信息。SELECT*FROM Sell WHERE 用戶號 IN(SELECT 用戶號 FROM Members WHERE 會員姓名=張三);說明:在執(zhí)行包含子查詢的說明:在執(zhí)行包含子查詢的SELECTSELECT語句時,系統(tǒng)先執(zhí)行子查詢,產(chǎn)語句時,系統(tǒng)先執(zhí)行子查詢,產(chǎn)生一個結(jié)果表,再執(zhí)行查詢。生一個結(jié)果表,

49、再執(zhí)行查詢。本例中,先執(zhí)行子查詢:本例中,先執(zhí)行子查詢:SELECT 用戶號 FROM Members WHERE 會員姓名=張三 得到一個只含有身份證號列的表。再執(zhí)行外查詢,若得到一個只含有身份證號列的表。再執(zhí)行外查詢,若SellSell表中某行表中某行的身份證號列值等于子查詢結(jié)果表中的任一個值,則該行就被選擇。的身份證號列值等于子查詢結(jié)果表中的任一個值,則該行就被選擇。子查詢嵌套舉例子查詢嵌套舉例ININ子查詢只能返回一列數(shù)據(jù)。對于較復(fù)雜的查詢,可以使用嵌套子查詢只能返回一列數(shù)據(jù)。對于較復(fù)雜的查詢,可以使用嵌套的子查詢。的子查詢?!纠?.285.28】查找購買了除查找購買了除“網(wǎng)頁程序設(shè)

50、計網(wǎng)頁程序設(shè)計”以外圖書的會員信息。以外圖書的會員信息。要查找會員信息,先要知道會員的身份證號,而要知道購買了除要查找會員信息,先要知道會員的身份證號,而要知道購買了除“網(wǎng)頁程序設(shè)計網(wǎng)頁程序設(shè)計”以外圖書的會員,可以按圖書編號在以外圖書的會員,可以按圖書編號在SellSell表中表中查到,但是查到,但是“網(wǎng)頁程序設(shè)計網(wǎng)頁程序設(shè)計”的圖書編號要通過查找的圖書編號要通過查找BookBook才可以才可以獲得。獲得。SELECT*FROM Members WHERE 用戶號 IN (SELECT 用戶號 FROM Sell WHERE 圖書編號 NOT IN (SELECT 圖書編號 FROM Boo

51、k WHERE 書名=網(wǎng)頁程序設(shè)計);比較子查詢比較子查詢這種子查詢可以認(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)頁設(shè)計網(wǎng)頁設(shè)計”類圖書價格都高的類圖書價格都高的圖書基圖書基本信息。本信息。SELECT 圖書編號,圖書類別,單價 FROM Book WHERE 單價ALL(SELECT 單價 F

52、ROM Book WHERE 圖書類別=網(wǎng)頁設(shè)計);比較子查詢比較子查詢【例5.30】查找Sell表中訂購冊數(shù)不低于編號為 TP7/301-135 的任何一個訂單的訂購冊數(shù)的訂單信息。SELECT 圖書編號,訂購冊數(shù) FROM Sell WHERE 訂購冊數(shù)SOME (SELECT 訂購冊數(shù) FROM Sell WHERE 圖書編號=TP7/301-135 );外連接與子查詢外連接與子查詢一、對一、對YGGLYGGL數(shù)據(jù)庫完成多表查詢:數(shù)據(jù)庫完成多表查詢:1 1、使用左外連接顯示員工表中員工基本信息和所在部門的部門名稱、使用左外連接顯示員工表中員工基本信息和所在部門的部門名稱二、使用子查詢完成

53、:二、使用子查詢完成:2 2、查找工資收入大于、查找工資收入大于20002000元的員工的基本信息元的員工的基本信息3 3、查找在財務(wù)部工作的員工的基本信息、查找在財務(wù)部工作的員工的基本信息4 4、查找住在、查找住在“中山中山”的員工的工作部門名稱的員工的工作部門名稱聚合函數(shù)聚合函數(shù)聚合函數(shù)聚合函數(shù)SELECTSELECT子句的表達(dá)式中還可以包含所謂的聚合函數(shù)。聚合函數(shù)常子句的表達(dá)式中還可以包含所謂的聚合函數(shù)。聚合函數(shù)常常用于對一組值進(jìn)行計算,然后返回單個值。常用于對一組值進(jìn)行計算,然后返回單個值。函函 數(shù)數(shù) 名名說說 明明COUNTCOUNT求組中項數(shù),返回求組中項數(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)計組中滿足條件函數(shù),用于統(tǒng)計組中滿足條件的行數(shù)或總行數(shù),返回的行數(shù)或總行數(shù),返回SELECTSELECT語句檢索到的行中非語句檢索到的行中非NULLNULL值的數(shù)目,若值的數(shù)目,若找不到匹配的行,則返回找不到匹配的行,則返回0 0。語法格式為:語法格式為:COUNT(AL

55、L|DISTINCT 表達(dá)式表達(dá)式|*)其中,其中,表達(dá)式1是一個表達(dá)式,其數(shù)據(jù)類型是除是一個表達(dá)式,其數(shù)據(jù)類型是除BLOBBLOB或或TEXTTEXT之外的之外的任何類型。任何類型。ALLALL表示對所有值進(jìn)行運(yùn)算,表示對所有值進(jìn)行運(yùn)算,DISTINCTDISTINCT表示去除重復(fù)值,表示去除重復(fù)值,默認(rèn)為默認(rèn)為ALLALL。使用。使用COUNT(*)COUNT(*)時將返回檢索行的總數(shù)目,不論其是否包時將返回檢索行的總數(shù)目,不論其是否包含含 NULLNULL值。值?!纠?.315.31】求會員總?cè)藬?shù)。求會員總?cè)藬?shù)。SELECT COUNT(*)AS 會員數(shù) FROM Members;【例

56、例5.325.32】統(tǒng)計已結(jié)清的訂單數(shù)。統(tǒng)計已結(jié)清的訂單數(shù)。SELECT COUNT(是否結(jié)清)AS 已結(jié)清的訂單數(shù) FROM Sell;注意:注意:這里這里COUNT(COUNT(是否結(jié)清是否結(jié)清)只統(tǒng)計是否結(jié)清列中不為只統(tǒng)計是否結(jié)清列中不為NULLNULL的行。的行?!纠?.335.33】統(tǒng)計訂購冊數(shù)在統(tǒng)計訂購冊數(shù)在5 5以上的訂單數(shù)。以上的訂單數(shù)。SELECT COUNT(訂購冊數(shù))AS 訂購冊數(shù)在5以上的訂單數(shù) FROM Sell WHERE 訂購冊數(shù)5;COUNT函數(shù)舉例函數(shù)舉例MAXMAX和和MINMIN函數(shù)函數(shù)函數(shù)函數(shù)(2 2)MAXMAX和和MINMINMAXMAX和和MIN

57、MIN分別用于求表達(dá)式中所有值項的最大值與最小值,語法格分別用于求表達(dá)式中所有值項的最大值與最小值,語法格式為:式為:MAX/MIN(ALL|DISTINCT 表達(dá)式)其中,其中,expressionexpression是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型可以是是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型可以是數(shù)字、字符和時間日期數(shù)字、字符和時間日期 類型。類型?!纠?.355.35】求訂購了圖書編號為求訂購了圖書編號為TP7/301-135的訂單的最高訂購的訂單的最高訂購冊數(shù)和最低訂購冊數(shù)。冊數(shù)和最低訂購冊數(shù)。SELECT MAX(訂購冊數(shù)),MIN(訂購冊數(shù))FROM Sell WHERE 圖書

58、編號=TP7/301-135;注意:注意:當(dāng)給定列上只有空值或檢索出的中間結(jié)果為空時,當(dāng)給定列上只有空值或檢索出的中間結(jié)果為空時,MAXMAX和和MINMIN函數(shù)的值也為空。函數(shù)的值也為空。SUMSUM函數(shù)和函數(shù)和AVGAVG函數(shù)函數(shù)(3 3)SUMSUM函數(shù)和函數(shù)和AVGAVG函數(shù)函數(shù)SUMSUM和和AVGAVG分別用于求表達(dá)式中所有值項的總和與平均值,語法格式為:分別用于求表達(dá)式中所有值項的總和與平均值,語法格式為:SUM/AVG(ALL|DISTINCT 表達(dá)式)其中,其中,expressionexpression是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型只能是數(shù)值型。是常量、列、函數(shù)或表達(dá)式

59、,其數(shù)據(jù)類型只能是數(shù)值型?!纠?.365.36】求訂購了圖書編號為求訂購了圖書編號為TP7/301-135圖書的訂購總冊數(shù)。圖書的訂購總冊數(shù)。SELECT SUM(訂購冊數(shù))AS 訂購總冊數(shù) FROM Sell WHERE 圖書編號=TP7/301-135;【例例5.375.37】求訂購圖書編號為求訂購圖書編號為TP7/301-135圖書的訂單平均冊數(shù)。圖書的訂單平均冊數(shù)。SELECT AVG(訂購冊數(shù))AS 每筆訂單平均冊數(shù) FROM Sell WHERE 圖書編號=TP7/301-135;任務(wù)三任務(wù)三任務(wù)三任務(wù)三 分類匯總與排序分類匯總與排序分類匯總與排序分類匯總與排序 GROUP BY

60、GROUP BY子句主要用于根據(jù)字段對行分組。例如,根據(jù)學(xué)生所學(xué)子句主要用于根據(jù)字段對行分組。例如,根據(jù)學(xué)生所學(xué)的專業(yè)對的專業(yè)對XSXS表中的所有行分組,結(jié)果是每個專業(yè)的學(xué)生成為一組。表中的所有行分組,結(jié)果是每個專業(yè)的學(xué)生成為一組。GROUP BYGROUP BY子句的語法格式如下:子句的語法格式如下:GROUP BY 列名列名|表達(dá)式表達(dá)式 ASC|DESC,.WITH ROLLUPGROUP BYGROUP BY子句后通常包含列名或表達(dá)式。子句后通常包含列名或表達(dá)式。MySQLMySQL對對GROUP BYGROUP BY子句子句進(jìn)行了擴(kuò)展,可以在列的后面指定進(jìn)行了擴(kuò)展,可以在列的后面指定

61、ASCASC(升序)或(升序)或DESCDESC(降序)。(降序)。GROUP BYGROUP BY可以根據(jù)一個或多個列進(jìn)行分組,也可以根據(jù)表達(dá)式進(jìn)行可以根據(jù)一個或多個列進(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)計按圖書類別統(tǒng)計BookBook表中各類圖書的庫存數(shù)。表中各類圖書的庫存數(shù)。SELECT 圖書類別,COUNT(*)AS 庫存數(shù) FROM Book

62、 GROUP BY 圖書類別;【例【例5.405.40】按圖書編號分類統(tǒng)計其訂單數(shù)和訂單的平均訂購冊數(shù)。按圖書編號分類統(tǒng)計其訂單數(shù)和訂單的平均訂購冊數(shù)。SELECT 圖書編號,AVG(訂購冊數(shù))AS 訂購冊數(shù),COUNT(訂單號)AS 訂單數(shù) FROM Sell GROUP BY 圖書編號;帶帶帶帶ROLLUPROLLUP的的的的GROUP BYGROUP BY子句子句子句子句 使用帶使用帶ROLLUPROLLUP操作符的操作符的GROUP BYGROUP BY子句,可指定在結(jié)果集內(nèi)不僅子句,可指定在結(jié)果集內(nèi)不僅包含由包含由 GROUP BY GROUP BY 提供的正常行,還包含匯總行。提供

63、的正常行,還包含匯總行?!纠?.415.41】按圖書類別、出版社分類統(tǒng)計按圖書類別、出版社分類統(tǒng)計BookBook表中各類圖書的庫存表中各類圖書的庫存數(shù)。數(shù)。SELECT 圖書類別,出版社,Sum(數(shù)量)AS 庫存數(shù) FROM Book GROUP BY 圖書類別,出版社;請將執(zhí)行結(jié)果與以下語句比較:請將執(zhí)行結(jié)果與以下語句比較:SELECT 圖書類別,出版社,Sum(數(shù)量)AS 庫存數(shù) FROM Book GROUP BY 圖書類別,出版社 WITH ROLLUP;HAVINGHAVINGHAVINGHAVING子句子句子句子句使用使用HAVINGHAVING子句的目的與子句的目的與WHER

64、EWHERE子句類似,不同的是子句類似,不同的是WHEREWHERE子句子句是用來在是用來在FROMFROM子句之后選擇行,而子句之后選擇行,而HAVINGHAVING子句用來在子句用來在GROUP BYGROUP BY子句子句后選擇行。后選擇行。語法格式:語法格式:HAVING 條件條件其中,其中,條件條件的定義和的定義和WHEREWHERE子句中的條件類似,不過子句中的條件類似,不過HAVINGHAVING子子句中的條件可以包含聚合函數(shù),而句中的條件可以包含聚合函數(shù),而WHEREWHERE子句中則不可以。子句中則不可以。SQLSQL標(biāo)準(zhǔn)要求標(biāo)準(zhǔn)要求HAVINGHAVING必須引用必須引用G

65、ROUP BYGROUP BY子句中的列或用于聚合子句中的列或用于聚合函數(shù)中的列。不過,函數(shù)中的列。不過,MySQLMySQL支持對此工作性質(zhì)的擴(kuò)展,并允許支持對此工作性質(zhì)的擴(kuò)展,并允許HAVINGHAVING引用引用SELECTSELECT清單中的列和外部子查詢中的列。清單中的列和外部子查詢中的列。HAVINGHAVINGHAVINGHAVING子句舉例子句舉例子句舉例子句舉例【例例5.425.42】查找查找SellSell表中每個會員平均訂購冊數(shù)在表中每個會員平均訂購冊數(shù)在1010本以上的本以上的會員的用戶號和平均訂購冊數(shù)。會員的用戶號和平均訂購冊數(shù)。SELECT 用戶號,AVG(訂購冊數(shù)

66、)AS 平均訂購冊數(shù) FROM Sell GROUP BY 用戶號 HAVING AVG(訂購冊數(shù))10;【例例5.435.43】查找查找SellSell表中會員訂單數(shù)在表中會員訂單數(shù)在2 2筆以上且每筆訂購冊數(shù)筆以上且每筆訂購冊數(shù)都在都在5 5本以上的會員。本以上的會員。SELECT 用戶號,AVG(訂購冊數(shù))FROM Sell WHERE 訂購冊數(shù) 5 GROUP BY 用戶號 HAVING COUNT(*)2;ORDER BY子句子句在一條在一條SELECTSELECT語句中,如果不使用語句中,如果不使用ORDER BYORDER BY子句,結(jié)果中行的順子句,結(jié)果中行的順序是不可預(yù)料的。使用序是不可預(yù)料的。使用ORDER BYORDER BY子句后可以保證結(jié)果中的行按一定順子句后可以保證結(jié)果中的行按一定順序排列。序排列。語法格式:語法格式:ORDER BY 列名列名|表達(dá)式表達(dá)式|列編號列編號 ASC|DESC,.說明:說明:ORDER BYORDER BY子句后可以是一個列、一個表達(dá)式或一個正整數(shù)。子句后可以是一個列、一個表達(dá)式或一個正整數(shù)。正整數(shù)表示按結(jié)果表中該位置上的列排序

展開閱讀全文
溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!