




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 SELECT 條件列表?xiàng)l件列表2 FROM子句子句3 WHERE子句子句4 統(tǒng)計(jì)統(tǒng)計(jì)5 利用查詢結(jié)果創(chuàng)建新表利用查詢結(jié)果創(chuàng)建新表6 使用使用UNION運(yùn)算符實(shí)現(xiàn)多查詢聯(lián)合運(yùn)算符實(shí)現(xiàn)多查詢聯(lián)合7 8 掌握簡(jiǎn)單的Transact-SQL語(yǔ)句。學(xué)會(huì)對(duì)查詢結(jié)果進(jìn)行分組統(tǒng)計(jì)、合計(jì)和排序等復(fù)雜的SELECT語(yǔ)句操作。一、基本結(jié)構(gòu)uSELECT 記錄顯示范圍 字段列表u INTO 新表名u FROM 表名或表名列表及其連接方式 u WHERE 條件表達(dá)式u GROUP BY 分組字段名列表 HAVING 分組條件表達(dá)式 u ORDER BY 排序字段名列表 ASC | DESC u COMPUTE 集合
2、函數(shù)(列名1) BY 列名2 n 說(shuō)明:u SELECT語(yǔ)句中各子句的順序:u SELECT 記錄范圍 字段列表 INTO FROM WHERE GROUP BY HAVING ORDER BY COMPUTE ul FROM用于指定數(shù)據(jù)來(lái)源:u 單表查詢簡(jiǎn)單格式:FROM 表名u 多表查詢時(shí)的格式:FROM 表名列表及其連接方式ulCOMPUTE子句不能與INTO子句或GROUP BY子句同時(shí)使用。(1) SELECT子句:子句:指明目標(biāo)列(字段、表達(dá)式、函數(shù)表達(dá)式、常量)。指明目標(biāo)列(字段、表達(dá)式、函數(shù)表達(dá)式、常量)?;颈碇邢嗤牧忻硎緸椋罕砻颈碇邢嗤牧忻硎緸椋罕砻?列名列名(
3、2) FROM子句:子句:指明數(shù)據(jù)源。表間用指明數(shù)據(jù)源。表間用“,”分割。數(shù)據(jù)源不在當(dāng)前分割。數(shù)據(jù)源不在當(dāng)前數(shù)據(jù)庫(kù)中,使用數(shù)據(jù)庫(kù)中,使用“數(shù)據(jù)庫(kù)名數(shù)據(jù)庫(kù)名.表名表名”表示。一表多用,用表示。一表多用,用別名標(biāo)識(shí)。定義表別名:表名別名別名標(biāo)識(shí)。定義表別名:表名別名(3) WHERE子句:子句:元組選擇條件。元組選擇條件。(4) GROUP BY子句:子句:結(jié)果集分組。當(dāng)目標(biāo)列中有統(tǒng)計(jì)函數(shù),則統(tǒng)計(jì)結(jié)果集分組。當(dāng)目標(biāo)列中有統(tǒng)計(jì)函數(shù),則統(tǒng)計(jì)為分組統(tǒng)計(jì),否則為對(duì)整個(gè)結(jié)果集統(tǒng)計(jì)。子句后帶上為分組統(tǒng)計(jì),否則為對(duì)整個(gè)結(jié)果集統(tǒng)計(jì)。子句后帶上HAVING子子句表達(dá)組選擇條件(帶函數(shù)的表達(dá)式)。句表達(dá)組選擇條件(帶
4、函數(shù)的表達(dá)式)。(5) ORDER BY子句:子句:排序。當(dāng)排序要求為排序。當(dāng)排序要求為ASC時(shí)升序排序;排序要時(shí)升序排序;排序要求為求為DESC時(shí)降序排列。時(shí)降序排列。(1) (1) 算術(shù)操作符算術(shù)操作符+ +(加號(hào))、(減號(hào))、(加號(hào))、(減號(hào))、* *(乘號(hào))和(乘號(hào))和 / /(除號(hào))。(除號(hào))。(2) (2) 比較操作符比較操作符= =(等于)、(等于)、 (大于)、(大于)、 (小于)、(小于)、=(大于等于)、(大于等于)、!=!=(不等于)、(不等于)、(小于大于)、(小于大于)、!(不大(不大于)和于)和 !、=、90;自內(nèi)連接簡(jiǎn)稱自連接,是一張表自己對(duì)自己的內(nèi)連接,即在一張
5、表的兩個(gè)副本之間進(jìn)行內(nèi)連接。用自連接可以將同一個(gè)表的不同行連接起來(lái)。 使用自連接時(shí),必須為兩個(gè)副本指定別名,使之在邏輯上成為兩個(gè)表。 語(yǔ)法格式: SELECT 列名列表 FROM 表名 AS 別名1 join 表名.別名2 ON 別名1.列名=別名2.列名例如,課程表中的先行課是在上學(xué)期應(yīng)開(kāi)設(shè)的,先行課的先行課,即間接先行課應(yīng)提前一學(xué)年開(kāi)設(shè)。如果求查詢某門(mén)課的間接先行課或全部課程的間接先行課,就需要對(duì)課程表進(jìn)行自身連接。SELECT A.課程號(hào),A.課程名,B.先行課 FROM 課程 A,課程 B WHERE A.先行課=B.課程號(hào)課程號(hào)課程號(hào)課程名課程名先行課先行課C1計(jì)算機(jī)引論計(jì)算機(jī)引論C
6、2PASCAL語(yǔ)言語(yǔ)言C1C3數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)C2C4數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)C3C5軟件工程軟件工程C4課程的先行關(guān)系鏈為:課程的先行關(guān)系鏈為:C5C4C3C2C1,課程的間接關(guān)系鏈為:課程的間接關(guān)系鏈為:C5C3C1。 課程號(hào)課程號(hào)課程名課程名先行課先行課課程號(hào)課程號(hào)課程名課程名先行課先行課C1計(jì)算機(jī)引論計(jì)算機(jī)引論C1計(jì)算機(jī)引論計(jì)算機(jī)引論C2Pascal語(yǔ)言語(yǔ)言C1C2Pascal語(yǔ)言語(yǔ)言C1C3數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)C2C3數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)C2C4數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)C3C4數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)C3C5軟件工程軟件工程C4C5軟件工程軟件工程C4A.課程號(hào)課程號(hào)A.課程名課程名B.先行課先行課C2Pascal語(yǔ)言語(yǔ)言C3
7、數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)C1C4數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)C2C5軟件工程軟件工程C3AB結(jié)果自連接雖然使用一個(gè)表但有兩個(gè)拷貝,在邏輯上是兩個(gè)表而且字段完全相同,因此字段列表中字段名必須加上其中一個(gè)表的別名做前綴。使用自連接會(huì)產(chǎn)生許多重復(fù)行,一般加關(guān)鍵字DISTINCT過(guò)濾掉重復(fù)行。自連接默認(rèn)按ON使用的連接字段排序(供貨商ID,貨號(hào)),為了按廠家順序再按進(jìn)貨日期排序,本例使用了ORDER BY指定排序。由于使用了DISTINCT,所以不允許使用字段列表沒(méi)有指定的“g1.進(jìn)貨日期”排序,也不允許使用別名“供貨日期”進(jìn)行排序,本例使用了字段列表中的表達(dá)式。左外部連接操作是在結(jié)果集中保留連接表達(dá)式左表中的非匹配記錄;右
8、外部連接操作是在結(jié)果集中保留連接表達(dá)式右表中的非匹配記錄。外部連接符號(hào)為“*=”,右外部連接符號(hào)為“=*”。外部連接中不匹配的分量用NULL表示。職工職工號(hào)號(hào)姓名姓名性別性別年齡年齡所在部所在部門(mén)門(mén)部門(mén)部門(mén)號(hào)號(hào)部門(mén)名部門(mén)名稱稱電話電話1010李勇李勇男男201111生產(chǎn)科生產(chǎn)科5661011劉晨劉晨女女1912計(jì)劃科計(jì)劃科5781012王敏王敏女女221213一車(chē)間一車(chē)間4671014張立張立男男211314科研所科研所職工表職工表 部門(mén)表部門(mén)表 職工號(hào)職工號(hào)姓名姓名性別性別年齡年齡所在部門(mén)所在部門(mén)部門(mén)名稱部門(mén)名稱電話電話1010李勇李勇男男2011生產(chǎn)科生產(chǎn)科5661012王敏王敏女女221
9、2計(jì)劃科計(jì)劃科5781014張立張立男男2113一車(chē)間一車(chē)間467職工號(hào)職工號(hào)姓名姓名性別性別年齡年齡所在部門(mén)所在部門(mén)部門(mén)名稱部門(mén)名稱電話電話1010李勇李勇男男2011生產(chǎn)科生產(chǎn)科5661011劉晨劉晨女女191012王敏王敏女女2212計(jì)劃科計(jì)劃科5781014張立張立男男2113一車(chē)間一車(chē)間467內(nèi)連接的結(jié)果集 左外部連接的結(jié)果集 內(nèi)連接: SELECT 職工.*,部門(mén)名稱,電話 FROM 職工,部門(mén) WHERE 職工.所在部門(mén)= 部門(mén).部門(mén)號(hào);左外部連接: SELECT 職工.*,部門(mén)名稱,電話 FROM 職工,部門(mén) WHERE 職工.所在部門(mén)*= 部門(mén).部門(mén)號(hào);右外部連接: SELE
10、CT 職工.*,部門(mén)名稱,電話 FROM 職工,部門(mén) WHERE 職工.所在部門(mén) =*部門(mén).部門(mén)號(hào); 子查詢是嵌套在另一查詢中的 Select-From-Where 表達(dá)式(Where/Having)SQL允許多層嵌套,由內(nèi)而外地進(jìn)行分析,子查詢的結(jié)果作為父查詢的查找條件可以用多個(gè)簡(jiǎn)單查詢來(lái)構(gòu)成復(fù)雜查詢,以增強(qiáng)SQL的查詢能力子查詢中不使用 Order By 子句,Order By子句只能對(duì)最終查詢結(jié)果進(jìn)行排序我們可能會(huì)提出這樣的問(wèn)題,在雇員中誰(shuí)的工資最高,或者誰(shuí)的工資比趙軍的高。通過(guò)把一個(gè)查詢的結(jié)果作為另一個(gè)查詢的一部分,可以實(shí)現(xiàn)這樣的查詢功能。具體的講:要查詢工資高于趙軍的雇員的名字和工資
11、,必須通過(guò)2個(gè)步驟來(lái)完成, 第一步查詢雇員趙軍的工資, 第二步查詢工資高于趙軍的雇員。第一個(gè)查詢可以作為第二個(gè)查詢的一部分出現(xiàn)在第二個(gè)查詢的條件中,這就是子查詢。出現(xiàn)在其他查詢中的查詢稱為子查詢,包含其他查詢的查詢稱為主查詢。子查詢一般出現(xiàn)在SELECT語(yǔ)句的WHERE子句中。子查詢比主查詢先執(zhí)行,結(jié)果作為主查詢的條件。在書(shū)寫(xiě)上要用圓括號(hào)擴(kuò)起來(lái),并放在比較運(yùn)算符的右側(cè)。子查詢可以嵌套使用,最里層的查詢最先執(zhí)行。子查詢可以在SELECT、INSERT、UPDATE、DELETE等語(yǔ)句中使用。SELECT 姓名,年齡 FROM 學(xué)生WHERE 年齡(SELECT 年齡 FROM 學(xué)生 WHERE
12、姓名=李明);執(zhí)行過(guò)程分兩步:1、 SELECT 年齡 FROM 學(xué)生 WHERE 姓名=李明); 得出年齡=212、SELECT 姓名,年齡 FROM 學(xué)生 WHERE 年齡21【例5-20】求選修了高等數(shù)學(xué)的學(xué)生學(xué)號(hào)和姓名。 SELECT 學(xué)號(hào),姓名 FROM 學(xué)生 WHERE 學(xué)號(hào) IN ( SELECT 學(xué)號(hào) FROM 選課 WHERE 課程號(hào) IN ( SELECT 課程號(hào) FROM 課程 WHERE 課程名=高等數(shù)學(xué));該題也可以使用下面的連接查詢表達(dá)。 SELECT 學(xué)生.學(xué)號(hào),姓名 FROM 學(xué)生,課程,選課 WHERE 學(xué)生.學(xué)號(hào)=課程.學(xué)號(hào) AND 課程.課程號(hào)=選課.課程
13、號(hào) AND 課程.課程名=高等數(shù)學(xué);【例5-21】求C1課程的成績(jī)高于張三的學(xué)生學(xué)號(hào)和成績(jī)。SELECT 學(xué)號(hào),成績(jī) FROM 選課 WHERE 課程號(hào)=C1 AND 成績(jī) ( SELECt 成績(jī) FROM 選課 WHERE 課程號(hào)=C1 AND 學(xué)號(hào)= (SELECT 學(xué)號(hào) FROM 學(xué)生 WHERE 姓名=張三);格式為:字段比較符格式為:字段比較符ANY|ALLANY|ALL子查詢子查詢操作符操作符語(yǔ)意語(yǔ)意ANY大于子查詢結(jié)果中的大于子查詢結(jié)果中的某個(gè)值某個(gè)值,即表示大于查詢結(jié)果中,即表示大于查詢結(jié)果中最小值最小值A(chǔ)LL大于子查詢結(jié)果中的大于子查詢結(jié)果中的所有值所有值,即表示大于查詢結(jié)果
14、中,即表示大于查詢結(jié)果中最大值最大值A(chǔ)NY小于子查詢結(jié)果中的小于子查詢結(jié)果中的某個(gè)值某個(gè)值,即表示小于查詢結(jié)果中,即表示小于查詢結(jié)果中最大值最大值=ANY大于等于子查詢結(jié)果中的大于等于子查詢結(jié)果中的某個(gè)值某個(gè)值,即表示大于等于結(jié)果集中,即表示大于等于結(jié)果集中最小值最小值=ALL大于等于子查詢結(jié)果中的大于等于子查詢結(jié)果中的所有值所有值,即表示大于等于結(jié)果集中,即表示大于等于結(jié)果集中最大值最大值=ANY小于等于子查詢結(jié)果中的小于等于子查詢結(jié)果中的某個(gè)值某個(gè)值,即表示小于等于結(jié)果集中,即表示小于等于結(jié)果集中最大值最大值=ALL小于等于子查詢結(jié)果中的小于等于子查詢結(jié)果中的所有值所有值,即表示小于等于結(jié)
15、果集中,即表示小于等于結(jié)果集中最小值最小值=ANY等于子查詢結(jié)果中的等于子查詢結(jié)果中的某個(gè)值某個(gè)值,即相當(dāng)于,即相當(dāng)于IN=ALL等于子查詢結(jié)果中的等于子查詢結(jié)果中的所有值所有值(通常沒(méi)有實(shí)際意義通常沒(méi)有實(shí)際意義)!=(或或)ANY不等于子查詢結(jié)果中的不等于子查詢結(jié)果中的某個(gè)值某個(gè)值,!=(或或)ALL不等于子查詢結(jié)果中的不等于子查詢結(jié)果中的任何一個(gè)值任何一個(gè)值,即相當(dāng)于,即相當(dāng)于NOT IN【例【例5-225-22】求其他系中比計(jì)算機(jī)系某一學(xué)生年齡小的學(xué)生。】求其他系中比計(jì)算機(jī)系某一學(xué)生年齡小的學(xué)生。 SELECT * FROM 學(xué)生學(xué)生 WHERE 年齡年齡 ANY (SELECT 年齡年
16、齡 FROM 學(xué)生學(xué)生 WHERE 所在系所在系=計(jì)算機(jī)系計(jì)算機(jī)系) AND 所在系所在系計(jì)算機(jī)系計(jì)算機(jī)系;【例【例5-235-23】求其他系中比計(jì)算機(jī)系學(xué)生年齡都小的學(xué)生】求其他系中比計(jì)算機(jī)系學(xué)生年齡都小的學(xué)生SELECT * FROM 學(xué)生學(xué)生 WHERE 年齡年齡 ALL (SELECT 年齡年齡 FROM 學(xué)生學(xué)生 WHERE 所在系所在系=計(jì)算機(jī)計(jì)算機(jī)) AND 所在系所在系 計(jì)算機(jī)計(jì)算機(jī);不相關(guān)子查詢子查詢的查詢條件不依賴于父查詢相關(guān)子查詢子查詢的查詢條件依賴于父查詢不相關(guān)子查詢是由里向外逐層處理。即每個(gè)子查詢?cè)谏弦患?jí)查詢處理之前求解,子查詢的結(jié)果用于建立其父查詢的查找條件。相關(guān)子
17、查詢首先取外層查詢中表的第一個(gè)元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值處理內(nèi)層查詢,若WHERE子句返回值為真,則取此元組放入結(jié)果表;然后再取外層表的下一個(gè)元組;重復(fù)這一過(guò)程,直至外層表全部檢查完為止帶有IN謂詞的子查詢帶有比較運(yùn)算符的子查詢帶有ANY或ALL謂詞的子查詢帶有EXISTS謂詞的子查詢【例5-20】求選修了高等數(shù)學(xué)的學(xué)生學(xué)號(hào)和姓名。 SELECT 學(xué)號(hào),姓名 FROM 學(xué)生 WHERE 學(xué)號(hào) IN ( SELECT 學(xué)號(hào) FROM 選課 WHERE 課程號(hào) IN ( SELECT 課程號(hào) FROM 課程 WHERE 課程名=高等數(shù)學(xué));不相關(guān)子查詢1. EXISTS謂詞存在量詞 帶有E
18、XISTS謂詞的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值“true”或邏輯假值“false”。若內(nèi)層查詢結(jié)果非空,則返回真值若內(nèi)層查詢結(jié)果為空,則返回假值由EXISTS引出的子查詢,其目標(biāo)列表達(dá)式通常都用* ,因?yàn)閹XISTS的子查詢只返回真值或假值,給出列名無(wú)實(shí)際意義2. NOT EXISTS謂詞【例5-24】求選修了C2課程的學(xué)生姓名。 SELECT 姓名 FROM 學(xué)生 WHERE EXISTS (SELECT * FROM 選課 WHERE 學(xué)生.學(xué)號(hào)=學(xué)號(hào) AND 課程號(hào)=C2)思路分析: 本查詢涉及學(xué)生和選課關(guān)系。 在學(xué)生中依次取每個(gè)元組的學(xué)號(hào)的值,用此值去檢查選課關(guān)系。 若選課中存
19、在這樣的元組,其學(xué)號(hào)的值等于此學(xué)生.學(xué)號(hào)值,并且其課程號(hào)= C2,則取此學(xué)生.姓名送入結(jié)果關(guān)系?!纠纠?-255-25】求沒(méi)有選修】求沒(méi)有選修C2C2課程的學(xué)生姓名。課程的學(xué)生姓名。 SELECT 姓名姓名 FROM 學(xué)生學(xué)生 WHERE NOT EXISTS ( SELECT * FROM 選課選課 WHERE 學(xué)生學(xué)生.學(xué)號(hào)學(xué)號(hào)=學(xué)號(hào)學(xué)號(hào) AND 課程號(hào)課程號(hào)=C2);SELECT 姓名 FROM 學(xué)生 WHERE EXISTS (SELECT * FROM 選課 WHERE 學(xué)生.學(xué)號(hào)=學(xué)號(hào) AND 課程號(hào)=C2);一些帶EXISTS或NOT EXISTS謂詞的子查詢不能被其他形式的子
20、查詢等價(jià)替換所有帶IN謂詞、比較運(yùn)算符、ANY和ALL謂詞的子查詢都能用帶EXISTS謂詞的子查詢等價(jià)替換。例:例37查詢與“李明”在同一個(gè)系學(xué)習(xí)的學(xué)生??梢杂脦XISTS謂詞的子查詢替換:SELECT 學(xué)號(hào),姓名,所在系 FROM 學(xué)生 s1 WHERE exists (SELECT * FROM 學(xué)生 s2 WHERE s2.所在系 = s1.所在系 AND s2.姓名=李明)SELECT s1.學(xué)號(hào),s1.姓名,s1.所在系 FROM 學(xué)生 s1, 學(xué)生 s2 WHERE s2.所在系 = s1.所在系 AND s2.姓名=李明【例【例5-265-26】查詢選修了全部課程的學(xué)生的姓名。
21、】查詢選修了全部課程的學(xué)生的姓名。 SELECT SELECT 姓名姓名 FROM FROM 學(xué)生學(xué)生 WHERE NOT EXISTS (SELECT WHERE NOT EXISTS (SELECT * * FROM FROM 課程課程 WHERE NOT EXISTS (SELECT WHERE NOT EXISTS (SELECT * * FROM FROM 選課選課 WHERE WHERE 學(xué)生學(xué)生. .學(xué)號(hào)學(xué)號(hào)= =學(xué)號(hào)學(xué)號(hào) AND AND 課程課程. .課程號(hào)課程號(hào)= =課程號(hào)課程號(hào));第一個(gè)第一個(gè)not existsnot exists表示不在這些課程記錄表示不在這些課程記錄,
22、 ,第二個(gè)第二個(gè)not existsnot exists表示不存在這樣的選課記錄表示不存在這樣的選課記錄演變成演變成: :查詢這樣的學(xué)生姓名查詢這樣的學(xué)生姓名, ,沒(méi)有一門(mén)課是他不選的沒(méi)有一門(mén)課是他不選的. .SELECT * FROM 選課 xk ,學(xué)生 xs,課程 kc WHERE xs.學(xué)號(hào)=xk.學(xué)號(hào) AND kc.課程號(hào)=xk.課程號(hào)【例【例5-275-27】求選修了學(xué)號(hào)為】求選修了學(xué)號(hào)為“S2”S2”的學(xué)生所選修的全部課程的學(xué)生學(xué)號(hào)和的學(xué)生所選修的全部課程的學(xué)生學(xué)號(hào)和姓名。姓名。 SELECT SELECT 學(xué)號(hào),姓名學(xué)號(hào),姓名 FROM FROM 學(xué)生學(xué)生 WHERE NOT E
23、XISTS (SELECT WHERE NOT EXISTS (SELECT * * FROM FROM 選課選課 選課選課1 1 WHERE WHERE 選課選課1.1.學(xué)號(hào)學(xué)號(hào)=S2 AND NOT EXISTS =S2 AND NOT EXISTS (SELECT (SELECT * * FROM FROM 選課選課 選課選課2 2 WHERE WHERE 學(xué)生學(xué)生. .學(xué)號(hào)學(xué)號(hào)= =選課選課2.2.學(xué)號(hào)學(xué)號(hào) AND AND 選課選課2 .2 .課程號(hào)課程號(hào)= =選課選課1.1.課程號(hào)課程號(hào)) );查詢學(xué)生查詢學(xué)生X X選修的課程選修的課程Z Z和和S2S2學(xué)生選修的課程學(xué)生選修的課程Y
24、,Y,并要求并要求Z Z中包括全部的中包括全部的Y.Y.不存在這樣的課程y,學(xué)生S2選修了y,而學(xué)生x沒(méi)有選。把一列中的值進(jìn)行聚合運(yùn)算,返回單值的函數(shù)五個(gè)預(yù)定義的聚合函數(shù)平均值:Avg(ALL|DISTINCT)總和: Sum(ALL|DISTINCT)最小值:Min(ALL|DISTINCT)最大值:Max(ALL|DISTINCT)計(jì)數(shù): Count(ALL|DISTINCT)Count(*)、Count(Distinct)在SELECT語(yǔ)句中,可以使用聚合函數(shù)、行聚合函數(shù)、GROUP BY子句和COMPUTE子句對(duì)查詢結(jié)果進(jìn)行統(tǒng)計(jì)。GROUP BY子句可與行聚合函數(shù)或聚合函數(shù)一起使用。C
25、OMPUTE子句只能與行聚合函數(shù)一起使用。ROUP BY子句將一列或多列定義為一組,使得組內(nèi)所有的行在某些列中的數(shù)值都相同。查詢有些什么系?SELECT 所在系 FROM 學(xué)生 group by 所在系在SELECT語(yǔ)句中,也可以單純使用聚合函數(shù)而不使用GROUP BY子句和COMPUTE子句進(jìn)行統(tǒng)計(jì),這時(shí),它將所有符合條件的數(shù)據(jù)統(tǒng)計(jì)在一起,形成一行統(tǒng)計(jì)數(shù)據(jù),這種統(tǒng)計(jì)方法叫做標(biāo)量統(tǒng)計(jì)。【例【例5-31】求學(xué)生的總?cè)藬?shù)?!壳髮W(xué)生的總?cè)藬?shù)。 SELECT COUNT (*) FROM 學(xué)生學(xué)生;【例【例5-325-32】求選修了課程的學(xué)生人數(shù)?!壳筮x修了課程的學(xué)生人數(shù)。 SELECT COUNT(
26、DISTINCT 學(xué)號(hào)學(xué)號(hào)) FROM 選課選課;例:李明同學(xué)的成績(jī)最高分,最低分,總分和平均分。例:李明同學(xué)的成績(jī)最高分,最低分,總分和平均分。SELECT max(成績(jī)成績(jī)),min(成績(jī)成績(jī)),avg(成績(jī)成績(jī)) FROM 學(xué)生學(xué)生 st ,選課選課 kc where st.學(xué)號(hào)學(xué)號(hào)=kc.學(xué)號(hào)學(xué)號(hào) and 姓名姓名=李明李明分組函數(shù)中SUM和AVG只應(yīng)用于數(shù)值型的列;MAX、MIN和COUNT可以應(yīng)用于字符、數(shù)值和日期類型的列。組函數(shù)忽略列的空值。使用GROUP BY 從句可以對(duì)數(shù)據(jù)進(jìn)行分組。所謂分組就是按照列的相同內(nèi)容,將記錄劃分成組,對(duì)組可以應(yīng)用組函數(shù)。在組函數(shù)中可使用DISTIN
27、CT或ALL關(guān)鍵字。ALL表示對(duì)所有非NULL值(可重復(fù))進(jìn)行運(yùn)算(COUNT除外)。DISTINCT 表示對(duì)每一個(gè)非NULL值,如果存在重復(fù)值組函數(shù)只運(yùn)算一次。如果不指明上述關(guān)鍵字,默認(rèn)為ALL。 在使用GROUP BY子句時(shí),還可以用HAVING子句為分組統(tǒng)計(jì)進(jìn)一步設(shè)置統(tǒng)計(jì)條件,HAVING子句與GROUP BY子句的關(guān)系和WHERE子句與SELECT子句的關(guān)系類似。HAVING子句可以參照選擇列表中的任一項(xiàng),在HAVING子句中還可以使用邏輯運(yùn)算符連接多個(gè)條件。最多為128個(gè)。HAVING從句過(guò)濾分組后的結(jié)果,HAVING從句只能出現(xiàn)在GROUP BY從句之后。而WHERE從句要出現(xiàn)在G
28、ROUP BY從句之前。WHERE 是在對(duì)記錄分組之前過(guò)濾不滿條件的記錄HAVING是過(guò)濾掉整個(gè)分組,不滿足條件的組不要【例【例5-335-33】求課程和選修該課程的人數(shù)?!壳笳n程和選修該課程的人數(shù)。 SELECT 課程號(hào)課程號(hào),COUNT(學(xué)號(hào)學(xué)號(hào)) as 選修課程人數(shù)選修課程人數(shù) FROM 選課選課 GROUP BY 課程號(hào)課程號(hào);【例【例5-345-34】求選修課超過(guò)】求選修課超過(guò)3 3門(mén)課的學(xué)生學(xué)號(hào)。門(mén)課的學(xué)生學(xué)號(hào)。 SELECT 學(xué)號(hào)學(xué)號(hào) FROM 選課選課 GROUP BY 學(xué)號(hào)學(xué)號(hào) HAVING COUNT(*)2;查找圖書(shū)類別,要求類別中最高圖書(shū)定價(jià)不低于全部按類別分組的平均定
29、價(jià)的2倍。 SELECT A.* FROM 圖書(shū) AGROUP BY A.類別 HAVING MAX(A.定價(jià))=ALL(SELECT 2*AVG(B.定價(jià)) FROM 圖書(shū) B GROUP BY B.類別)SELECT count (*) , 類別 FROM 圖書(shū) GROUP BY 類別 SELECT AVG(定價(jià)) FROM 圖書(shū) GROUP BY 類別SELECT count (*) , avg(定價(jià)),類別 FROM 圖書(shū) GROUP BY 類別 SELECT count (*) , avg(定價(jià)), 類別 FROM 圖書(shū) GROUP BY 類別 having avg(定價(jià))202)求
30、機(jī)械工業(yè)出版社出版的各類圖書(shū)的平均定價(jià),用GROUP BY表示。SELECT 類別,AVG(定價(jià))平均價(jià) FROM 圖書(shū)WHERE 出版社=機(jī)械工業(yè)出版社GROUP BY 類別 ORDER BY 類別 ASC格式:compute 集合函數(shù)(列名1), By 列名2 ,.功能:先按列名2分類顯示參加匯總記錄的詳細(xì)信息,再在附加行中顯示對(duì)列名1的匯總值(單用集合函數(shù)或GROUP BY僅顯示統(tǒng)計(jì)匯總值)。 COMPUTE子句可以指定多個(gè)集合函數(shù),但不允許指定列別名。 SELECT 指定的字段列表是顯示詳細(xì)信息使用的字段,必須包含COMPUTE子句集合函數(shù)使用的列名1,與BY分組字段列名2無(wú)關(guān),也可以
31、使用*表示全部字段。 COMPUTE子句不帶BY表示對(duì)全部記錄統(tǒng)計(jì),相當(dāng)于在SELECT查詢結(jié)果后面帶一個(gè)統(tǒng)計(jì)值的后綴。COMPUTE子句帶BY子句時(shí)表示分組統(tǒng)計(jì),必須配合ORDER BY排序子句使用,且緊跟ORDER BY之后。BY后的列名2是要分組的字段(相當(dāng)于GROUP BY),可以不在SELECT指定的字段中,但必須包含在ORDER BY子句中,而且必須是第一順序。BY指定多個(gè)字段分組時(shí),也必須與ORDER BY的第一順序一致。 COMPUTE子句不能與INTO子句或GROUP BY子句同時(shí)使用。 一個(gè)SELECT語(yǔ)句中可使用多個(gè)COMPUTE子句,一個(gè)子句顯示一個(gè)附加行,多個(gè)子句時(shí)B
32、Y分組字段必須一致,且與ORDER BY一致,子句之間不能使用逗號(hào)。select sum(定價(jià)) from 圖書(shū) group by 類別select * from 圖書(shū) compute sum(定價(jià)) select * from 圖書(shū) order by 類別 compute sum(定價(jià)) select * from 圖書(shū) order by 類別 compute sum(定價(jià)) by 類別3)列出計(jì)算機(jī)類圖書(shū)的書(shū)號(hào)、名稱及價(jià)格,最后求出冊(cè)數(shù)和總價(jià)格SELECT 書(shū)號(hào),書(shū)名,定價(jià) FROM 圖書(shū)WHERE 類別=計(jì)算機(jī) ORDER BY 書(shū)號(hào) ASCCOMPUTE count (書(shū)號(hào)),SUM(
33、定價(jià))列出計(jì)算機(jī)類圖書(shū)的書(shū)號(hào)、名稱及價(jià)格,并求出各出版社這類書(shū)的總價(jià)格,最后求出全部?jī)?cè)數(shù)和總價(jià)格。SELECT書(shū)號(hào),書(shū)名,定價(jià) FROM 圖書(shū)WHERE 類別=計(jì)算機(jī)類ORDER BY出版社CONPUTE COUNT(*),SUM(定價(jià))BY 出版社COMPUTE COUNT(*),SUM(定價(jià))UNION運(yùn)算符可以將兩個(gè)或兩個(gè)以上的查詢結(jié)果合并成一個(gè)結(jié)果集合顯示。UNION運(yùn)算符的語(yǔ)法格式為: 查詢1 UNION ALL 查詢n ORDER BY 子句COMPUTE 子句其中查詢的格式為: SELECT select_listINTO子句FROM子句WHERE子句 GROUP BY 子句HA
34、VING 子句操作操作描述描述UNION并集,合并兩個(gè)操作的結(jié)果,去掉重復(fù)的部分。并集,合并兩個(gè)操作的結(jié)果,去掉重復(fù)的部分。UNION ALL并集,合并兩個(gè)操作的結(jié)果,保留重復(fù)部分。并集,合并兩個(gè)操作的結(jié)果,保留重復(fù)部分。(所有的所有的)MINUS差集,從前面的操作結(jié)果中去掉與后面操作結(jié)果相同的部分。差集,從前面的操作結(jié)果中去掉與后面操作結(jié)果相同的部分。INTERSECT交集,取兩個(gè)操作結(jié)果中的相同的部分。交集,取兩個(gè)操作結(jié)果中的相同的部分。在使用 UNION 運(yùn)算符組合的語(yǔ)句中,所有選擇列表的表達(dá)式數(shù)目必須相同(列名、算術(shù)表達(dá)式、聚合函數(shù)等)。在使用 UNION 組合的結(jié)果集中的相應(yīng)列、或個(gè)
35、別查詢中使用的任意列的子集必須具有相同數(shù)據(jù)類型,并且兩種數(shù)據(jù)類型之間必須存在可能的隱性數(shù)據(jù)轉(zhuǎn)換,或提供了顯式轉(zhuǎn)換。例如,在 datetime 數(shù)據(jù)類型的列和 binary 數(shù)據(jù)類型的列之間不可能存在 UNION 運(yùn)算符,除非提供了顯式轉(zhuǎn)換,而在 money 數(shù)據(jù)類型的列和 int 數(shù)據(jù)類型的列之間可以存在 UNION 運(yùn)算符,因?yàn)樗鼈兛梢赃M(jìn)行隱性轉(zhuǎn)換。用 UNION 運(yùn)算符組合的各語(yǔ)句中對(duì)應(yīng)的結(jié)果集列出現(xiàn)的順序必須相同,因?yàn)?UNION 運(yùn)算符是按照各個(gè)查詢給定的順序逐個(gè)比較各列。【例【例5-285-28】求選修了】求選修了C1C1課程或選修了課程或選修了C2C2課程的學(xué)生學(xué)號(hào)。課程的學(xué)生學(xué)號(hào)
36、。SELECT 學(xué)號(hào)學(xué)號(hào) FROM 選課選課 WHERE 課程號(hào)課程號(hào)=C1 UNION SELECT 學(xué)號(hào)學(xué)號(hào) FROM 選課選課 WHERE 課程號(hào)課程號(hào)=C2【例【例5-295-29】求選修】求選修C1C1課程,并且也選修課程,并且也選修C2C2課程的學(xué)生學(xué)號(hào)。課程的學(xué)生學(xué)號(hào)。 SELECT SELECT 學(xué)號(hào)學(xué)號(hào) FROM FROM 選課選課 WHERE WHERE 課程號(hào)課程號(hào)=C1=C1 INTERSECT INTERSECT SELECT SELECT 學(xué)號(hào)學(xué)號(hào) FROM FROM 選課選課 WHERE WHERE 課程號(hào)課程號(hào)=C2=C2;SELECT * FROM 圖書(shū)WHE
37、RE 類別=計(jì)算機(jī)類UNION ALLSELECT * FROM 圖書(shū)WHERE 出版社=機(jī)械工業(yè)出版社SELECT 學(xué)號(hào) FROM 選課 WHERE 課程號(hào)=C1 MINUSSELECT 學(xué)號(hào) FROM 選課 WHERE 課程號(hào)=C2;本例也可以用下面的EXISTS嵌套查詢表示。 SELECT 學(xué)號(hào) FROM 選課 選課1 WHERE 課程號(hào)=C1 AND NOT EXISTS (SELECT 學(xué)號(hào) FROM 選課 選課2 WHERE 選課1.學(xué)號(hào)=選課2.學(xué)號(hào) AND 選課2.課程號(hào)=C2);4.1 4.1 數(shù)據(jù)插入語(yǔ)句數(shù)據(jù)插入語(yǔ)句1. 1. 使用常量插入單個(gè)元組使用常量插入單個(gè)元組格式為
38、:格式為: INSERTINSERT INTO INTO表名表名(屬性列屬性列1 1 ,屬性列,屬性列2 2) VALUES ( VALUES (常量常量1 1 ,常量,常量2 2);【例【例5-355-35】將一個(gè)新學(xué)生記錄】將一個(gè)新學(xué)生記錄( (學(xué)號(hào):學(xué)號(hào):9801098010,姓名:,姓名:張三張三,年齡:,年齡:2020,所在系:,所在系:計(jì)算機(jī)系計(jì)算機(jī)系 ) )插入到插入到學(xué)生表中。學(xué)生表中。INSERTINSERTINTO INTO 學(xué)生學(xué)生VALUES (98010VALUES (98010,張三張三,2020,計(jì)算機(jī)系計(jì)算機(jī)系) );【例【例5-365-36】插入一條選課記錄】
39、插入一條選課記錄( (學(xué)號(hào):學(xué)號(hào):9801198011,課程號(hào):,課程號(hào):C10C10,成績(jī)不詳,成績(jī)不詳) )。 INSERTINSERT INTO INTO 選課選課 ( (學(xué)號(hào),課程號(hào)學(xué)號(hào),課程號(hào)) ) VALUES (98011 VALUES (98011,C10)C10);INSERT INTO表名(屬性列1,屬性列2) 子查詢;【例5-37】求每個(gè)系學(xué)生的平均年齡,把結(jié)果存入數(shù)據(jù)庫(kù)中。 CREATE TABLE 系平均年齡 (系名稱 CHAR(20), 平均年齡 SMALLINT); INSERT INTO 系平均年齡 SELECT 所在系,AVG(年齡) FROM 學(xué)生 GROUP BY 所在系;select * from 系平均年齡UPDATEUPDATE表名表名SETSET列名列名= =表達(dá)式表達(dá)式 ,列名,列名= =表達(dá)式表達(dá)式,nnWHEREWHERE條件條件 ;【例【例5-385-38】將學(xué)生表中全部學(xué)生的年齡加上】將學(xué)生表中全部學(xué)生的年齡加上2 2歲。歲。 UPDATE UPDATE 學(xué)生學(xué)生 SET SET 年齡年齡= =年齡年齡+2+2;【例【例5-395-39】將選課表中的數(shù)據(jù)庫(kù)課程的成績(jī)乘以】將選課表中的數(shù)據(jù)庫(kù)課程的成績(jī)乘以1.21.2。 UPDATE UP
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題開(kāi)題報(bào)告:道德與法治課教學(xué)方法與策略的研究
- 課題開(kāi)題報(bào)告:大思政課教育主體“數(shù)字+思政”素養(yǎng)的雙元培育機(jī)制與組態(tài)路徑研
- 課題開(kāi)題報(bào)告:初中地理學(xué)業(yè)評(píng)價(jià)與內(nèi)容標(biāo)準(zhǔn)的一致性研究
- 兼職教師外包協(xié)議
- 二零二五年度酒店業(yè)客戶反饋信息保密協(xié)議
- 工藝縫制帽企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略研究報(bào)告
- 酚醛磁漆企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 二零二五年度商業(yè)綜合體裝修工程售后責(zé)任協(xié)議
- 二零二五年度信息技術(shù)行業(yè)試用期勞動(dòng)合同匯編
- 基因檢測(cè)在動(dòng)物育種應(yīng)用行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 棗莊學(xué)院《電力拖動(dòng)與自動(dòng)控制系統(tǒng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)
- 綠化遷移專項(xiàng)施工方案
- 2025屆高三化學(xué)一輪復(fù)習(xí) 原電池 化學(xué)電源(第一課時(shí))課件
- 全院護(hù)理查房(食管裂孔疝)
- 2024-2025學(xué)年統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)第7課《溜索》任務(wù)驅(qū)動(dòng)型教學(xué)設(shè)計(jì)
- 2023-2024學(xué)年五年級(jí)科學(xué)下冊(cè)(冀人版)第4課露和霜(教學(xué)設(shè)計(jì))
- 《管理學(xué)》第一章-管理導(dǎo)論
- 2024年國(guó)考公務(wù)員行測(cè)真題及參考答案
- 二手車(chē)交易定金合同范本5篇
- NB∕T 10391-2020 水工隧洞設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論