




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、上一頁(yè)下一頁(yè)1第七章第七章 結(jié)構(gòu)化查詢語(yǔ)言結(jié)構(gòu)化查詢語(yǔ)言SQLSQL第一節(jié)第一節(jié) SQLSQL概述概述第二節(jié)第二節(jié) SQLSQL定義功能定義功能 第三節(jié)第三節(jié) SQLSQL操縱功能約操縱功能約第四節(jié)第四節(jié) SQLSQL查詢功能查詢功能上一頁(yè)下一頁(yè)2第一節(jié)第一節(jié) SQL概述概述 SQL是結(jié)構(gòu)化查詢語(yǔ)言是結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language)的縮寫。首先由美國(guó)的縮寫。首先由美國(guó)ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì))提出,后被提出,后被ISO采納為國(guó)際標(biāo)準(zhǔn)。采納為國(guó)際標(biāo)準(zhǔn)。一、一、 SQL語(yǔ)言發(fā)展簡(jiǎn)史語(yǔ)言發(fā)展簡(jiǎn)史二、二、 SQL語(yǔ)言的特點(diǎn)及分類語(yǔ)言的特點(diǎn)及分類是一
2、種一體化的語(yǔ)言。它包括了數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制等是一種一體化的語(yǔ)言。它包括了數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制等功能。功能。 數(shù)據(jù)定義數(shù)據(jù)定義 CREATE、ALTER、DROP等等 數(shù)據(jù)查詢數(shù)據(jù)查詢 SELECT 數(shù)據(jù)操縱數(shù)據(jù)操縱 INSERT、UPTATE、DELETE等等 由于由于VFP在數(shù)據(jù)安全性方面的欠缺,不支持在數(shù)據(jù)安全性方面的欠缺,不支持SQL的數(shù)據(jù)控制功能。的數(shù)據(jù)控制功能。(2) 是一種高度過(guò)程化的語(yǔ)言。是一種高度過(guò)程化的語(yǔ)言。(3) 非常簡(jiǎn)潔,但功能很強(qiáng)。非常簡(jiǎn)潔,但功能很強(qiáng)。(4) 可以直接以命令方式交互使用,又可以嵌入程序設(shè)計(jì)語(yǔ)言中以程序方式使用??梢?/p>
3、直接以命令方式交互使用,又可以嵌入程序設(shè)計(jì)語(yǔ)言中以程序方式使用。(1) 返 回上一頁(yè)下一頁(yè)3第二節(jié)第二節(jié) SQL的定義功能的定義功能 一、定義表的結(jié)構(gòu)一、定義表的結(jié)構(gòu)格式:格式: CREATE TABLE (字段屬性描述字段屬性描述) 該命令直接創(chuàng)建指定名稱的表的結(jié)構(gòu),各字段的名稱、類型、寬度等與括號(hào)中的描述相同。該命令直接創(chuàng)建指定名稱的表的結(jié)構(gòu),各字段的名稱、類型、寬度等與括號(hào)中的描述相同。如果此時(shí)有打開的數(shù)據(jù)庫(kù),則建立的是數(shù)據(jù)庫(kù)表,否則是自由表。如果此時(shí)有打開的數(shù)據(jù)庫(kù),則建立的是數(shù)據(jù)庫(kù)表,否則是自由表。【例例7.1】用】用SQL命令創(chuàng)建倉(cāng)庫(kù)表(命令創(chuàng)建倉(cāng)庫(kù)表(CKB.DBF)的結(jié)構(gòu),要求如
4、下。)的結(jié)構(gòu),要求如下。 CREATE TABLE CkB (CKH C(6),CKM C(10), CHF L,MJ N(3,0) 返 回字段名數(shù)據(jù)類型 寬度 小數(shù)位 備注CKH字符型6倉(cāng)庫(kù)號(hào)CKM字符型10倉(cāng)庫(kù)名CHF邏輯型存貨否MJ數(shù)值型30面積上一頁(yè)下一頁(yè)4 二、修改表的結(jié)構(gòu)二、修改表的結(jié)構(gòu) 用用ALTER TABLE命令可以修改表的結(jié)構(gòu)并且可以指定數(shù)據(jù)的完整命令可以修改表的結(jié)構(gòu)并且可以指定數(shù)據(jù)的完整性控制信息。該命令包括四種具體格式,分別可以完成不同的修改操作。性控制信息。該命令包括四種具體格式,分別可以完成不同的修改操作。(1)追加新字段)追加新字段 ALTERTABLE ADD
5、(2)修改原字段的屬性)修改原字段的屬性 ALTERTABLE ALTER (3)刪除字段)刪除字段 ALTERTABLE DROP (4)字段更名)字段更名 ALTERTABLE RENAME TO 【例【例7.27.2】為為CKB表添加一個(gè)管理員(表添加一個(gè)管理員(GLY)字段,類型為字符型,寬度)字段,類型為字符型,寬度位為位為8。 ALTER TABLE CKB ADD GLYGLY C(8)返 回上一頁(yè)下一頁(yè)5【例【例7.37.3】將將CKB表的管理員(表的管理員(GLY)字段的寬度修改為)字段的寬度修改為10。 ALTER TABLE CKB ALTER GLYGLY C(10)【
6、例【例7.47.4】將將CKB表的管理員(表的管理員(GLY)字段名更改為)字段名更改為“負(fù)責(zé)人(負(fù)責(zé)人(FZR)”。 ALTER TABLE CKB RENAME GLY TO FZR三、三、 表的刪除表的刪除 格式:格式:DROP TABLE 說(shuō)明:直接從磁盤上刪除指定的表。若是數(shù)據(jù)庫(kù)表,則必須先打開數(shù)據(jù)說(shuō)明:直接從磁盤上刪除指定的表。若是數(shù)據(jù)庫(kù)表,則必須先打開數(shù)據(jù)庫(kù)。庫(kù)。 【例【例7.57.5】刪除刪除CKB表表 DROP TABLE CKB返 回上一頁(yè)下一頁(yè)6主要包括數(shù)據(jù)的插入(主要包括數(shù)據(jù)的插入(INSERT)、刪除()、刪除(DELETE)、更新()、更新(UPDATE)三種功)三
7、種功能。能。一、數(shù)據(jù)插入一、數(shù)據(jù)插入 SQL 的的INSERT命令用于向指定的表中追加一條記錄,無(wú)論該表是否已經(jīng)打命令用于向指定的表中追加一條記錄,無(wú)論該表是否已經(jīng)打開,也不必從鍵盤輸入數(shù)據(jù),而是直接把數(shù)據(jù)寫在命令中。該命令動(dòng)詞是開,也不必從鍵盤輸入數(shù)據(jù),而是直接把數(shù)據(jù)寫在命令中。該命令動(dòng)詞是INSERT,因此也叫因此也叫“插入命令插入命令”。 格式:格式: Insert into Insert into ( (字段字段1 1,字段,字段2 2,););Values (Values (表達(dá)式表達(dá)式1 1,表達(dá)式,表達(dá)式2 2,) 若只插入部分字段,必須在表名后用括號(hào)依次指明所插入的字段名,且與
8、若只插入部分字段,必須在表名后用括號(hào)依次指明所插入的字段名,且與VALUES后括號(hào)中表達(dá)式的值一一對(duì)應(yīng)。當(dāng)插入整條記錄時(shí),則不必指出字段名,后括號(hào)中表達(dá)式的值一一對(duì)應(yīng)。當(dāng)插入整條記錄時(shí),則不必指出字段名,但但VALUES后括號(hào)中表達(dá)式的值,必須依次為表內(nèi)所有字段的值。后括號(hào)中表達(dá)式的值,必須依次為表內(nèi)所有字段的值。返 回第三節(jié)第三節(jié) SQL的操縱功能的操縱功能上一頁(yè)下一頁(yè)7【例【例7.7】向】向XSQK表插入一條記錄,學(xué)號(hào)、姓名、班級(jí)分別是表插入一條記錄,學(xué)號(hào)、姓名、班級(jí)分別是“0801100204”,“王一王一”和和“流體力學(xué)流體力學(xué)”這三個(gè)值。這三個(gè)值。 INSERT INTO XSQK(
9、xh,xm,bj) VALUES (INSERT INTO XSQK(xh,xm,bj) VALUES (0801100204,王一王一, , 流體力學(xué)流體力學(xué))【例【例7.8】向】向CJ表插入一條記錄,表插入一條記錄,“xh”、“kcdm”、“cj”分別為分別為“0801100204”、“150104”、86。 INSERT INTO CJ VALUES (INSERT INTO CJ VALUES (0801100204 , 150104,86),86) 可以可以“瀏覽瀏覽”方式查看插入結(jié)果。方式查看插入結(jié)果。 返 回上一頁(yè)下一頁(yè)8二、刪除數(shù)據(jù)二、刪除數(shù)據(jù)格式:格式: DELETE FRO
10、M DELETE FROM WHERE WHERE 功能:功能:對(duì)指定表中滿足條件的記錄做刪除對(duì)指定表中滿足條件的記錄做刪除標(biāo)記標(biāo)記。如果不指定條。如果不指定條件,則對(duì)所有記錄添加刪除件,則對(duì)所有記錄添加刪除標(biāo)記標(biāo)記。 說(shuō)明:此命令無(wú)須事先打開表,注意條件子句用說(shuō)明:此命令無(wú)須事先打開表,注意條件子句用WHERE?!纠纠?.9】將】將XSQK表中年齡大于表中年齡大于25歲的女生進(jìn)行邏輯刪除。歲的女生進(jìn)行邏輯刪除。解:解: DELETE FROM XSQK;DELETE FROM XSQK;WHERE(YEAR(DATE()-YEAR(CSRQ)25) AND XB=WHERE(YEAR(DA
11、TE()-YEAR(CSRQ)25) AND XB=女女 返 回上一頁(yè)下一頁(yè)9三、三、 更新命令更新命令格式: UPDATE SET 字段名字段名1= ,字段名字段名2= WHERE 功能:對(duì)指定表中滿足條件的記錄,用指定表達(dá)式的值更新指定字段的值。功能:對(duì)指定表中滿足條件的記錄,用指定表達(dá)式的值更新指定字段的值。 說(shuō)明:說(shuō)明: 如果不指定條件如果不指定條件,該命令默認(rèn)的范圍為所有記錄。該命令默認(rèn)的范圍為所有記錄?!纠纠?.107.10】將將XSQK表中所有學(xué)生的入學(xué)成績(jī)都提高表中所有學(xué)生的入學(xué)成績(jī)都提高5分。分。 UPDATE XSQK SET RXCJRXCJ=RXCJ+5【例【例7.1
12、17.11】將將XSQK表中表中1990年及其以后出生的所有學(xué)生的入學(xué)成績(jī)都提年及其以后出生的所有學(xué)生的入學(xué)成績(jī)都提高高10分。分。 UPDATE XSQK SET RXCJRXCJ=RXCJ+10; WHERE YEAR(CSRQ)=1990四、四、SQL與與VFP命令對(duì)比命令對(duì)比 1、VFP需先打開表,需先打開表,SQL不用。不用。 2、SQL中要出現(xiàn)表名,中要出現(xiàn)表名,VFP除除USE和和SET RELATION外都不出表名。外都不出表名。返 回上一頁(yè)下一頁(yè)10 查詢功能是查詢功能是SQL的核心,的核心,SQL的查詢命令又稱為的查詢命令又稱為SELECT語(yǔ)句語(yǔ)句。一、一、SELECTSE
13、LECT命令的格式命令的格式SELECT ALLDISTINCT TOP n PERCENT; SELECT ALLDISTINCT TOP n PERCENT; 別名別名.ASAS , ,別名別名22ASAS ; ;FROM FROM 數(shù)據(jù)庫(kù)名數(shù)據(jù)庫(kù)名!ASAS,數(shù)據(jù)庫(kù)名數(shù)據(jù)庫(kù)名2 2!表名表名 ; ;INNERLEFT OUTERRIGHTOUTERFULLOUTER JOIN INNERLEFT OUTERRIGHTOUTERFULLOUTER JOIN ! WHERE WHERE |; GROUP BY GROUP BY 1, 2HAVING HAVING ; ORDER BY ORD
14、ER BY ASC|DESCASC|DESCASC|DESC;2ASC|DESC;INTO TABLEINTO TABLEINTO CURSORINTO CURSOR| INTO ARRAY| INTO ARRAYTO FILE 這條命令看起來(lái)很復(fù)雜,但其基本形式由這條命令看起來(lái)很復(fù)雜,但其基本形式由SELECT-FROM模塊構(gòu)成,模塊構(gòu)成,其余多為可選項(xiàng),要根據(jù)查詢的需求去選用。其余多為可選項(xiàng),要根據(jù)查詢的需求去選用。第四節(jié)第四節(jié) SQL的數(shù)據(jù)查詢的數(shù)據(jù)查詢返 回上一頁(yè)下一頁(yè)11二、基本查詢二、基本查詢 格式:格式:SELECTALL|DISTINCTFROM 1、查詢指定字段、查詢指定字段
15、【例【例7.12】 從學(xué)生情況表(從學(xué)生情況表(XSQK)中查詢所有學(xué)生的學(xué)號(hào)()中查詢所有學(xué)生的學(xué)號(hào)(XH)、姓名()、姓名(XM)、)、班級(jí)(班級(jí)(BJ)和入學(xué)成績(jī)()和入學(xué)成績(jī)(RXCJ)信息。)信息。 SELECT XH,XM,BJ,RXCJ FROM XSQK 【例【例7.13】查詢查詢成績(jī)表成績(jī)表(CJ)中的所有學(xué)生成績(jī)信息。中的所有學(xué)生成績(jī)信息。 SELECT SELECT * * FROM CJ &“ FROM CJ &“* *”為通配符,表示所有字段。為通配符,表示所有字段。 該命令等價(jià)于:該命令等價(jià)于: SELECT XH,KCDM,CJ FROM CJSE
16、LECT XH,KCDM,CJ FROM CJ 2 2、查詢經(jīng)過(guò)計(jì)算的列、查詢經(jīng)過(guò)計(jì)算的列 【例【例7.14】查詢學(xué)生情況表(】查詢學(xué)生情況表(XSQK)中所有學(xué)生的學(xué)號(hào)()中所有學(xué)生的學(xué)號(hào)(XH)、姓名()、姓名(XM)和)和年齡。年齡。SELECT XH,XM,YEAR(DATE()-YEAR(CSRQ) AS 年齡年齡 FROM XSQK 3、去掉重復(fù)值【例【例7.15】查詢學(xué)生情況表(】查詢學(xué)生情況表(XSQK)中所有學(xué)生的班級(jí)()中所有學(xué)生的班級(jí)(BJ),要求去掉重復(fù)信),要求去掉重復(fù)信息。息。 SELECT DISTINCT BJ FROM XSQK返 回上一頁(yè)下一頁(yè)12三、條件查
17、詢?nèi)?、條件查詢 在在SELECT語(yǔ)句中,查詢條件用語(yǔ)句中,查詢條件用WHERE子句來(lái)描述。主要有以下幾種子句來(lái)描述。主要有以下幾種情況:情況:1 1比較大小比較大小用于比較的運(yùn)算符包括:用于比較的運(yùn)算符包括:=,=,=,#、!=或或。【例【例7.16】查詢學(xué)生情況表】查詢學(xué)生情況表(XSQK)中所有男生的學(xué)號(hào)中所有男生的學(xué)號(hào)(XH)、姓名、姓名(XM)和性和性別別(XB)。 SELECT XH,XM,XB FROM XSQK WHERE xb=SELECT XH,XM,XB FROM XSQK WHERE xb=男男 【例【例7.17】 查詢學(xué)生情況表查詢學(xué)生情況表(XSQK)中入學(xué)成績(jī)中入學(xué)
18、成績(jī)(RXCJ)多于多于565分(含)的分(含)的學(xué)生的學(xué)號(hào)學(xué)生的學(xué)號(hào)(XH)、姓名、姓名(XM)和入學(xué)成績(jī)和入學(xué)成績(jī)(RXCJ) 。 SELECT XH,XM,RXCJ FROM XSQK WHERE RXCJ=565SELECT XH,XM,RXCJ FROM XSQK WHERE RXCJ=5652多重條件多重條件使用邏輯運(yùn)算符使用邏輯運(yùn)算符AND、NOT和和OR可以進(jìn)行復(fù)合條件查詢??梢赃M(jìn)行復(fù)合條件查詢?!纠纠?.18】 查詢學(xué)生情況表查詢學(xué)生情況表(XSQK)中所有男生且入學(xué)成績(jī)中所有男生且入學(xué)成績(jī)(RXCJ)高于高于500分的學(xué)生的學(xué)號(hào)分的學(xué)生的學(xué)號(hào)(XH)、姓名、姓名(XM)和
19、入學(xué)成績(jī)和入學(xué)成績(jī)(RXCJ) 。 SELECT XH,XM,RXCJ FROM XSQK WHERE XB=SELECT XH,XM,RXCJ FROM XSQK WHERE XB=男男 AND RXCJ500 AND RXCJ500返 回上一頁(yè)下一頁(yè)13【例【例7.19】 查詢學(xué)生情況表查詢學(xué)生情況表(XSQK)中金融中金融091班和政法班和政法092班的所有學(xué)生信班的所有學(xué)生信息息 。 SELECT SELECT * * FROM XSQK WHERE BJ= FROM XSQK WHERE BJ=金融金融091 OR BJ= OR BJ=政法政法092 3. 確定范圍確定范圍BETWE
20、ENAND和和NOT BETWEENAND分別用來(lái)描述宇段值在分別用來(lái)描述宇段值在或不在指定范圍的條件。其中,或不在指定范圍的條件。其中,AND的左端給出查詢范圍的下限,的左端給出查詢范圍的下限,AND的的右端給出的是查詢范圍的上限。右端給出的是查詢范圍的上限。【例【例7.20】 查詢學(xué)生情況表查詢學(xué)生情況表(XSQK)中入學(xué)成績(jī)中入學(xué)成績(jī)(RXCJ)在在550到到600分之間分之間的學(xué)生的學(xué)號(hào)的學(xué)生的學(xué)號(hào)(XH)、姓名、姓名(XM)和入學(xué)成績(jī)和入學(xué)成績(jī)(RXCJ) 。 SELECT XH,XM,RXCJ FROM XSQK WHERE RXCJ BETWEEN 550 AND 600SELE
21、CT XH,XM,RXCJ FROM XSQK WHERE RXCJ BETWEEN 550 AND 6004 4確定集合確定集合 這里所說(shuō)的集合是相同類型的常量所組成的集合。謂詞這里所說(shuō)的集合是相同類型的常量所組成的集合。謂詞IN用來(lái)描述字用來(lái)描述字段的值屬于指定的集合,段的值屬于指定的集合,NOT IN則描述字段值不屬于指定的集合。則描述字段值不屬于指定的集合?!纠纠?.21】 查詢學(xué)生情況表查詢學(xué)生情況表(XSQK)中金融中金融091班和政法班和政法092班的所有學(xué)生信班的所有學(xué)生信息息 。 SELECT SELECT * * FROM XSQK WHERE BJ IN ( FROM
22、XSQK WHERE BJ IN (金融金融091,政法政法092)返 回上一頁(yè)下一頁(yè)145 5部分匹配查詢部分匹配查詢 LIKE是字符匹配運(yùn)算符,進(jìn)行匹配運(yùn)算時(shí)可以使用通配符是字符匹配運(yùn)算符,進(jìn)行匹配運(yùn)算時(shí)可以使用通配符“”和和下劃線下劃線“_”,其中,其中,“”表示表示0個(gè)或多個(gè)任意字符,個(gè)或多個(gè)任意字符,“_”表示表示1個(gè)任意字個(gè)任意字符。例如,第符。例如,第2個(gè)字符為個(gè)字符為B的字符串可以表示為的字符串可以表示為“_B”。LIKE的格式為:的格式為:LIKE【例【例7.227.22】查詢】查詢XSQKXSQK表中所有姓表中所有姓“張張”的學(xué)號(hào)(的學(xué)號(hào)(XHXH)和姓名()和姓名(XMX
23、M)。)。 SELECT XH,XM FROM XSQK WHERE XM LIKE SELECT XH,XM FROM XSQK WHERE XM LIKE 張張%四、四、 統(tǒng)計(jì)查詢統(tǒng)計(jì)查詢SQL提供了許多庫(kù)函數(shù),可以進(jìn)一步增強(qiáng)檢索功能,這些函數(shù)主要有:提供了許多庫(kù)函數(shù),可以進(jìn)一步增強(qiáng)檢索功能,這些函數(shù)主要有: COUNT(COUNT(列名列名| |* *) ) 按列統(tǒng)計(jì)記錄個(gè)數(shù)按列統(tǒng)計(jì)記錄個(gè)數(shù) SUM(SUM() ) 計(jì)算一列值的總和計(jì)算一列值的總和 AVG(AVG() ) 計(jì)算一列值的平均值計(jì)算一列值的平均值 MAX(MAX() ) 求一列值中的最大值求一列值中的最大值 MIN(MIN(
24、) ) 求一列值中的最小值求一列值中的最小值返 回上一頁(yè)下一頁(yè)15 如果指定如果指定DISTINCT,則表示在計(jì)算時(shí)要取消指定行或列中的重復(fù)值。,則表示在計(jì)算時(shí)要取消指定行或列中的重復(fù)值。使用使用SUM,AVG,MAX,MIN函數(shù)時(shí),指定列必須是數(shù)值型。另外,在函數(shù)時(shí),指定列必須是數(shù)值型。另外,在標(biāo)準(zhǔn)標(biāo)準(zhǔn)SQL中只能在中只能在SELECT子句和子句和HAVING短語(yǔ)中使用庫(kù)函數(shù)。短語(yǔ)中使用庫(kù)函數(shù)?!纠纠?.237.23】查詢成績(jī)表(】查詢成績(jī)表(CJCJ)中學(xué)號(hào)為)中學(xué)號(hào)為“0901100103”0901100103”的學(xué)生的學(xué)號(hào)的學(xué)生的學(xué)號(hào)(XHXH),總分和平均分。),總分和平均分。SE
25、LECT XH,SUM(CJ) AS 總分總分,AVG(CJ) AS 平均分平均分 FROM CJ;WHERE XH=0901100103【例【例7.247.24】查詢成績(jī)表(】查詢成績(jī)表(CJCJ)中課程代碼()中課程代碼(KCDMKCDM)為)為“150205”150205”的課程代的課程代碼,最高分和最低分。碼,最高分和最低分。SELECT KCDM,MAX(CJ) AS 最高分最高分,MIN(CJ) AS 最低分最低分 ;FROM CJ WHERE KCDM=150205【例【例7.257.25】統(tǒng)計(jì)成績(jī)表(】統(tǒng)計(jì)成績(jī)表(CJCJ)中有多少門課。)中有多少門課。SELECT COUNT
26、(DISTINCT KCDM) AS 課程數(shù)課程數(shù) FROM CJ【例【例7.267.26】統(tǒng)計(jì)】統(tǒng)計(jì)XSQKXSQK表中學(xué)生人數(shù)。表中學(xué)生人數(shù)。SELECT COUNT(*) AS 學(xué)生人數(shù)學(xué)生人數(shù) FROM XSQK 返 回上一頁(yè)下一頁(yè)16五、五、 分組查詢分組查詢 GROUP BY 子句可以將查詢結(jié)果按一列或多列值分組,列值相等的為子句可以將查詢結(jié)果按一列或多列值分組,列值相等的為一組,還可以利用一組,還可以利用HAVING短語(yǔ)按一定的條件對(duì)分組后的數(shù)據(jù)進(jìn)行篩選。短語(yǔ)按一定的條件對(duì)分組后的數(shù)據(jù)進(jìn)行篩選。GROUP BY子句一般應(yīng)跟在子句一般應(yīng)跟在 WHERE子句之后,沒(méi)有子句之后,沒(méi)有W
27、HERE子句時(shí),跟在子句時(shí),跟在FROM子句后。子句后。如果對(duì)分組有要求的話,則可以用如果對(duì)分組有要求的話,則可以用HAVING短語(yǔ)指定篩選條短語(yǔ)指定篩選條件。該短語(yǔ)必須與件。該短語(yǔ)必須與GROUP BY配合使用。需要強(qiáng)調(diào)的是,配合使用。需要強(qiáng)調(diào)的是,HAVING短語(yǔ)與短語(yǔ)與WHERE子句之間并不矛盾,子句之間并不矛盾,WHERE子句用于表的選擇運(yùn)算,子句用于表的選擇運(yùn)算,HAVING短短語(yǔ)用于設(shè)置分組的篩選條件,即滿足該條件的分組數(shù)據(jù)才被輸出。語(yǔ)用于設(shè)置分組的篩選條件,即滿足該條件的分組數(shù)據(jù)才被輸出。【例【例7.27】查詢成績(jī)表(查詢成績(jī)表(CJCJ)中每門課程的課程代碼()中每門課程的課程
28、代碼(KCDMKCDM)、最高分和最)、最高分和最低分。低分。SELECT KCDM,MAX(CJ) AS 最高分最高分,MIN(CJ) AS 最低分最低分; FROM CJ GROUP BY KCDM【例【例7.28】查詢成績(jī)表(查詢成績(jī)表(CJCJ)中每名學(xué)生的學(xué)號(hào)()中每名學(xué)生的學(xué)號(hào)(XHXH)、最高分和最低分。)、最高分和最低分。SELECT XH,MAX(CJ)AS 最高分最高分,MIN(CJ) AS 最低分最低分 FROM CJ;GROUP BY XH返 回上一頁(yè)下一頁(yè)17【例【例7.29】 統(tǒng)計(jì)輸出班級(jí)人數(shù)超過(guò)統(tǒng)計(jì)輸出班級(jí)人數(shù)超過(guò)18(含)人的各班級(jí)的入學(xué)成績(jī)平均分。(含)人的各
29、班級(jí)的入學(xué)成績(jī)平均分。 SELECT BJ,AVG(RXCJ) AS SELECT BJ,AVG(RXCJ) AS 平均分平均分 FROM XSQK;FROM XSQK; GROUP BY BJ HAVING COUNT( GROUP BY BJ HAVING COUNT(* *)=18)=18【例【例7.30】在成績(jī)表(】在成績(jī)表(CJ)里查詢選修了)里查詢選修了“150104”和和“150205”的學(xué)生平的學(xué)生平均成績(jī)?cè)诰煽?jī)?cè)?0分及以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。分及以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。SELECT XH,KCDM,AVG(CJ) AS 平均成績(jī)平均成績(jī) FROM CJ;WHERE
30、 KCDM IN (150104,150205) GROUP BY XH;HAVING AVG(CJ)=80六、查詢的排序六、查詢的排序 利用利用ORDER BY子句可以對(duì)查詢的結(jié)果按指定字段進(jìn)行排序。其中,子句可以對(duì)查詢的結(jié)果按指定字段進(jìn)行排序。其中,ASC表示升序,表示升序,DESC表示降序,缺省時(shí)表示升序。另外,利用該子句還表示降序,缺省時(shí)表示升序。另外,利用該子句還可以實(shí)現(xiàn)多重排序。可以實(shí)現(xiàn)多重排序?!纠纠?.31】查詢查詢學(xué)生情況表學(xué)生情況表(XSQK)中的學(xué)生信息,要求按入學(xué)成績(jī)由高到中的學(xué)生信息,要求按入學(xué)成績(jī)由高到低順序排序。低順序排序。 SELECT SELECT * *
31、FROM XSQK ORDER BY RXCJ DESC FROM XSQK ORDER BY RXCJ DESC返 回上一頁(yè)下一頁(yè)18【例【例7.32】查詢查詢學(xué)生情況表學(xué)生情況表(XSQK)中的學(xué)生學(xué)號(hào)(中的學(xué)生學(xué)號(hào)(XH)、姓名()、姓名(XM)、)、班級(jí)(班級(jí)(BJ)和入學(xué)成績(jī)()和入學(xué)成績(jī)(RXCJ)。要求查詢結(jié)果按班級(jí)升序排列,班級(jí))。要求查詢結(jié)果按班級(jí)升序排列,班級(jí)相同再按入學(xué)成績(jī)降序排列。相同再按入學(xué)成績(jī)降序排列。 SELECT XH,XM,BJ,RXCJ FROM XSQK ORDER BY BJ,RXCJ DESCSELECT XH,XM,BJ,RXCJ FROM XSQK
32、 ORDER BY BJ,RXCJ DESC【例【例7.33】 統(tǒng)計(jì)輸出班級(jí)人數(shù)超過(guò)統(tǒng)計(jì)輸出班級(jí)人數(shù)超過(guò)18(含)人的各班級(jí)的入學(xué)成績(jī)平均分(含)人的各班級(jí)的入學(xué)成績(jī)平均分,并按平均分降序排列。并按平均分降序排列。 SELECT BJ,AVG(RXCJ) AS SELECT BJ,AVG(RXCJ) AS 平均分平均分 FROM XSQK;FROM XSQK; GROUP BY BJ HAVING COUNT( GROUP BY BJ HAVING COUNT(* *)=18 ORDER BY 2 DESC)=18 ORDER BY 2 DESC如果用戶需要輸出滿足條件的前幾個(gè)記錄,可以使用以
33、下短語(yǔ):如果用戶需要輸出滿足條件的前幾個(gè)記錄,可以使用以下短語(yǔ): TOP PERCENT 其中,其中, 表示要顯示前幾個(gè)記錄的數(shù)目。若使用表示要顯示前幾個(gè)記錄的數(shù)目。若使用PERCENTPERCENT,則則 應(yīng)取應(yīng)取0.010.01至至99.9999.99間的實(shí)數(shù),表示要顯示所有查詢結(jié)果中間的實(shí)數(shù),表示要顯示所有查詢結(jié)果中的前百分之幾的記錄。的前百分之幾的記錄。注意,注意,TOPTOP短語(yǔ)要與短語(yǔ)要與ORDER BYORDER BY短語(yǔ)同時(shí)使用才有效。短語(yǔ)同時(shí)使用才有效。【例【例7.34】 查詢?nèi)雽W(xué)成績(jī)最高的三位同學(xué)的姓名和入學(xué)成績(jī)。查詢?nèi)雽W(xué)成績(jī)最高的三位同學(xué)的姓名和入學(xué)成績(jī)。SELECT T
34、OP 3 XM,RXCJ FROM XSQK ORDER BY RXCJ DESCORDER BY RXCJ DESC返 回上一頁(yè)下一頁(yè)19【例【例7.35】查詢?nèi)雽W(xué)成績(jī)最低的】查詢?nèi)雽W(xué)成績(jī)最低的30%同學(xué)的姓名和入學(xué)成績(jī)。同學(xué)的姓名和入學(xué)成績(jī)。 SELECT TOP 30 PERCENT XM,RXCJ FROM XSQK; ORDER BY RXCJ DESC七、利用空值查詢七、利用空值查詢 在在SQL中可以查詢某字段取值為空中可以查詢某字段取值為空(NULL)的記錄,空值不同于零和空的記錄,空值不同于零和空格,它不占任何存儲(chǔ)空間,中是一個(gè)特殊的符號(hào)格,它不占任何存儲(chǔ)空間,中是一個(gè)特殊的符
35、號(hào)“NULL”。輸入。輸入NULL的的方法是復(fù)合鍵方法是復(fù)合鍵CTRL+0(零)。(零)?!纠纠?.36】查詢課程表(】查詢課程表(KCB)中沒(méi)有課程名稱的記錄信息。)中沒(méi)有課程名稱的記錄信息。 SELECT * FROM KCB WHERE KCMC IS NULL注:查詢空值時(shí)要使用注:查詢空值時(shí)要使用“IS NULL”,而,而“=NULL”是無(wú)效的,因?yàn)榭罩挡皇菬o(wú)效的,因?yàn)榭罩挡皇且粋€(gè)確定的值。是一個(gè)確定的值。八、連接查詢八、連接查詢 如果查詢涉及兩個(gè)或兩個(gè)以上的表,則需要將相關(guān)的表按某個(gè)字段連如果查詢涉及兩個(gè)或兩個(gè)以上的表,則需要將相關(guān)的表按某個(gè)字段連接起來(lái),這種查詢稱為連接查詢(多
36、表查詢)接起來(lái),這種查詢稱為連接查詢(多表查詢)。返 回上一頁(yè)下一頁(yè)201、等值連接查詢、等值連接查詢(1)2個(gè)表查詢條件格式個(gè)表查詢條件格式 表名表名1公共字段名公共字段名=表名表名2公共字段名公共字段名其中,引用不同表中的字段需在字段名前加表名和其中,引用不同表中的字段需在字段名前加表名和 “.”?!纠纠?.37a】 查詢查詢“趙剛趙剛”同學(xué)的學(xué)號(hào)、姓名,性別和成績(jī)。同學(xué)的學(xué)號(hào)、姓名,性別和成績(jī)。SELECT XSQK.XH,XM,XB,CJ FROM XSQK,CJ ;WHERE XSQK.XH=CJ.XH AND XM=趙剛趙剛(2)3個(gè)表查詢查詢條件格式個(gè)表查詢查詢條件格式表名表名
37、1公共字段名公共字段名1=表名表名2公共字段名公共字段名1 AND 表名表名2公共字段名公共字段名2=表表名名3公共字段名公共字段名2 【例【例7.37b 】 查詢查詢“趙剛趙剛”同學(xué)的學(xué)號(hào)、姓名,性別、選修的課程名稱和同學(xué)的學(xué)號(hào)、姓名,性別、選修的課程名稱和成績(jī)。成績(jī)。SELECT XSQK.XH,XM,XB,KCMC,CJ; FROM XSQK,CJ,KCB;WHERE CJ.KCDM=KCB.KCDM AND XSQK.XH=CJ.XH;AND XM=趙剛趙剛返 回上一頁(yè)下一頁(yè)212、超連接查詢、超連接查詢超連接查詢包括內(nèi)部連接、左連接、右連接和全連接等幾種情況的查詢。超連接查詢包括內(nèi)部
38、連接、左連接、右連接和全連接等幾種情況的查詢。這里只介紹內(nèi)連接。這里只介紹內(nèi)連接。格式如下:格式如下:(1 1)2個(gè)表查詢條件格式個(gè)表查詢條件格式FROM FROM 表名表名1 1INNER INNER JOIN JOIN 表名表名2 ON 2 ON 表名表名1.公共字段名公共字段名=表名表名2.公共字段名公共字段名可以看出,超連接查詢是通過(guò)可以看出,超連接查詢是通過(guò)FROM短語(yǔ)給出連接類型,用短語(yǔ)給出連接類型,用ON短語(yǔ)給出短語(yǔ)給出連接條件進(jìn)行的。連接條件進(jìn)行的。其中其中INNER 可以省略??梢允÷浴!纠纠?.37c 】 查詢查詢“趙剛趙剛”同學(xué)的學(xué)號(hào)、姓名,性別和成績(jī)。同學(xué)的學(xué)號(hào)、姓名
39、,性別和成績(jī)。SELECT XSQK.XH,XM,XB,CJ FROM XSQK JOIN CJ ;ON XSQK.XH=CJ.XH WHERE XM=趙剛趙剛(2 2)3個(gè)表查詢條件格式個(gè)表查詢條件格式FROM FROM 表名表名1 1 JOIN JOIN 表名表名2 JION 2 JION 表名表名3 ON 3 ON 表名表名2.公共字段名公共字段名=表名表名3.公共字公共字段名段名 ON 表名表名1.公共字段名公共字段名=表名表名2.公共字段名公共字段名 返 回上一頁(yè)下一頁(yè)22【例【例7.37d 】 查詢查詢“趙剛趙剛”同學(xué)的學(xué)號(hào)、姓名,性別、選修的課程名稱和同學(xué)的學(xué)號(hào)、姓名,性別、選修
40、的課程名稱和成績(jī)。成績(jī)。SELECT XSQK.XH,XM,XB,KCMC,CJ ; FROM XSQK JOIN CJ JOIN KCB;ON CJ.KCDM=KCB.KCDM ON XSQK.XH=CJ.XH ;WHERE XM=趙剛趙剛九、嵌套查詢九、嵌套查詢所謂所謂嵌套查詢,是指在嵌套查詢,是指在WHERE子句條件中涉及字段與另一個(gè)子句條件中涉及字段與另一個(gè)SELECT查查詢結(jié)果的比較,詢結(jié)果的比較,也就是說(shuō),嵌套查詢是指在一個(gè)也就是說(shuō),嵌套查詢是指在一個(gè)SELECT語(yǔ)句中包含另一語(yǔ)句中包含另一個(gè)個(gè)SELECT語(yǔ)句的查詢。語(yǔ)句的查詢。SQL 支持嵌套查詢,這正是支持嵌套查詢,這正是SQ
41、L結(jié)構(gòu)化的具體體結(jié)構(gòu)化的具體體現(xiàn)?,F(xiàn)。 處于內(nèi)層的查詢稱為子查詢,處于外層的查詢稱為父查詢。處于內(nèi)層的查詢稱為子查詢,處于外層的查詢稱為父查詢。在子查詢?cè)谧硬樵兊牡腟ELECT語(yǔ)句不能使用語(yǔ)句不能使用ORDER BY子句,即子句,即ORDER BY子句只能對(duì)最終子句只能對(duì)最終查詢結(jié)果排序。查詢結(jié)果排序。1、返回一個(gè)值的子查詢、返回一個(gè)值的子查詢 當(dāng)子查詢的返回值只有一個(gè)時(shí),可以使用當(dāng)子查詢的返回值只有一個(gè)時(shí),可以使用,=,=,!=或或 等等比較運(yùn)算符將父查詢和子查詢連接起來(lái)。比較運(yùn)算符將父查詢和子查詢連接起來(lái)。返 回上一頁(yè)下一頁(yè)23【例【例7.38 】 從成績(jī)表中查詢從成績(jī)表中查詢“趙剛趙剛”
42、同學(xué)的考試成績(jī)信息,要求顯示同學(xué)的考試成績(jī)信息,要求顯示CJ表表的所有字段。的所有字段。SELECT * FROM CJ ;WHERE XH=(SELECT XH FROM XSQK WHERE XM=趙剛趙剛)2、返回一組值的子查詢、返回一組值的子查詢?nèi)绻硬樵兊姆祷刂挡恢挂粋€(gè),而是一個(gè)集合時(shí),則不能直接使用比較運(yùn)如果子查詢的返回值不止一個(gè),而是一個(gè)集合時(shí),則不能直接使用比較運(yùn)算符,可以在運(yùn)算符和子查詢之間插入算符,可以在運(yùn)算符和子查詢之間插入ANY、SOME、ALL。WHERE子句中的條件書寫格式為:子句中的條件書寫格式為: ANY|SOME|ALL(ANY|SOME|ALL(子查詢子查詢
43、) )其中,其中,ANY和和SOME是作用相同的謂詞。是作用相同的謂詞。ANY代表某個(gè)值,代表某個(gè)值,ALL代表所有代表所有值。從上述格式可以看出,使用謂詞值。從上述格式可以看出,使用謂詞ANY或或ALL時(shí)必須同時(shí)使用比較運(yùn)算時(shí)必須同時(shí)使用比較運(yùn)算符。例如,符。例如, ANYANY的語(yǔ)義為:大于子查詢結(jié)果中的某個(gè)值。的語(yǔ)義為:大于子查詢結(jié)果中的某個(gè)值。 ALLALL的語(yǔ)義為:大于子查詢結(jié)果中的所有值。的語(yǔ)義為:大于子查詢結(jié)果中的所有值。由于子查詢的結(jié)果是記錄的集合,故也可使用謂詞由于子查詢的結(jié)果是記錄的集合,故也可使用謂詞IN來(lái)實(shí)現(xiàn)。來(lái)實(shí)現(xiàn)。返 回上一頁(yè)下一頁(yè)24【例【例7.39 】查詢選修了
44、課程代碼(】查詢選修了課程代碼(KCDM)為)為“150204”的學(xué)生的姓名的學(xué)生的姓名(XM)。)。 SELECT XM FROM XSQK WHERE XH=ANY;(SELECT XH FROM CJ WHERE KCDM=150205)也可以寫成:也可以寫成:SELECT XM FROM XSQK WHERE XH IN;(SELECT XH FROM CJ WHERE KCDM=150205)【例【例7.40】查詢高于男生入學(xué)成績(jī)最高分的女生的姓名和入學(xué)成績(jī)?!坎樵兏哂谀猩雽W(xué)成績(jī)最高分的女生的姓名和入學(xué)成績(jī)。SELECT XM,RXCJ FROM XSQK WHERE RXCJAL
45、L;(SELECT RXCJ FROM XSQK WHERE XB=男男) AND XB=女女也可以寫成:也可以寫成: SELECT XM,RXCJ FROM XSQK WHERE RXCJ;(SELECT MAX(RXCJ) FROM XSQK WHERE XB=男男) AND XB=女女返 回上一頁(yè)下一頁(yè)25EXISTS也稱為存在量詞,也稱為存在量詞,WHERE子句中使用量詞子句中使用量詞EXISTS表示當(dāng)子查詢的表示當(dāng)子查詢的結(jié)果非空時(shí),條件為真:反之,則為假。結(jié)果非空時(shí),條件為真:反之,則為假。EXISTS前也可以加前也可以加NOT,表示檢測(cè),表示檢測(cè)條件為條件為“不存在不存在”?!纠?/p>
46、【例7.41】查詢選修了課程代碼(】查詢選修了課程代碼(KCDM)為)為“140101”的學(xué)生的姓名的學(xué)生的姓名(XM)。)。SELECT XM FROM XSQK WHERE EXISTS;(SELECT * FROM CJ WHERE XSQK.XH=CJ.XH AND KCDM=140101)十、查詢結(jié)果輸出十、查詢結(jié)果輸出1、 將查詢結(jié)果存入表中將查詢結(jié)果存入表中 若在若在SELECTSELECT語(yǔ)句中使用語(yǔ)句中使用INTO TABLEINTO TABLE 短語(yǔ),則可以將查詢的結(jié)果存放短語(yǔ),則可以將查詢的結(jié)果存放到表中,該表是自由表。到表中,該表是自由表。2、將查詢結(jié)果存入臨時(shí)文件中、將查詢結(jié)果存入臨時(shí)文件中 若在若在SELECTSELECT語(yǔ)句中使用語(yǔ)句中使用IN
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能化工廠廠房設(shè)計(jì)施工一體化合同
- 房屋買賣價(jià)格評(píng)估合同
- 旅游典當(dāng)擔(dān)保服務(wù)合同模板
- 倉(cāng)儲(chǔ)物流中心管理員職責(zé)與服務(wù)合同
- 大型時(shí)尚活動(dòng)方案
- 外資公司下午茶活動(dòng)方案
- 基金公司與萬(wàn)達(dá)活動(dòng)方案
- 夏季下鄉(xiāng)活動(dòng)方案
- 夏季救助活動(dòng)方案
- 大型活動(dòng)冬天活動(dòng)方案
- 河南省鄭州市管城回族區(qū)2024-2025學(xué)年數(shù)學(xué)五年級(jí)第二學(xué)期期末聯(lián)考試題含答案
- SEAtech 石油石化ICS網(wǎng)絡(luò)安全解決方案
- 班級(jí)管理中的法治教育實(shí)踐
- 高二【數(shù)學(xué)(人教A版)】用空間向量研究距離、夾角問(wèn)題(2)-教學(xué)設(shè)計(jì)
- 智能化、數(shù)字化轉(zhuǎn)型
- 天津中考英語(yǔ)2020-2024年5年真題匯編-學(xué)生版-專題09 短文首字母填空
- 中山市第一中級(jí)人民法院保險(xiǎn)糾紛審判白皮書(2021年-2023年)2024年11月
- 綜合機(jī)電供應(yīng)及安裝專業(yè)分包工程機(jī)電系統(tǒng)調(diào)試方案
- 供應(yīng)室安全目標(biāo)
- 城市軌道交通車輛智慧運(yùn)維系統(tǒng)技術(shù)規(guī)范
- 高等數(shù)學(xué)基礎(chǔ)-005-國(guó)開機(jī)考復(fù)習(xí)資料
評(píng)論
0/150
提交評(píng)論