




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、上一頁下一頁1第七章第七章 結(jié)構(gòu)化查詢語言結(jié)構(gòu)化查詢語言SQLSQL第一節(jié)第一節(jié) SQLSQL概述概述第二節(jié)第二節(jié) SQLSQL定義功能定義功能 第三節(jié)第三節(jié) SQLSQL操縱功能約操縱功能約第四節(jié)第四節(jié) SQLSQL查詢功能查詢功能上一頁下一頁2第一節(jié)第一節(jié) SQL概述概述 SQL是結(jié)構(gòu)化查詢語言是結(jié)構(gòu)化查詢語言(Structured Query Language)的縮寫。首先由美國的縮寫。首先由美國ANSI(美國國家標(biāo)準(zhǔn)協(xié)會美國國家標(biāo)準(zhǔn)協(xié)會)提出,后被提出,后被ISO采納為國際標(biāo)準(zhǔn)。采納為國際標(biāo)準(zhǔn)。一、一、 SQL語言發(fā)展簡史語言發(fā)展簡史二、二、 SQL語言的特點及分類語言的特點及分類是一
2、種一體化的語言。它包括了數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制等是一種一體化的語言。它包括了數(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) 是一種高度過程化的語言。是一種高度過程化的語言。(3) 非常簡潔,但功能很強(qiáng)。非常簡潔,但功能很強(qiáng)。(4) 可以直接以命令方式交互使用,又可以嵌入程序設(shè)計語言中以程序方式使用??梢?/p>
3、直接以命令方式交互使用,又可以嵌入程序設(shè)計語言中以程序方式使用。(1) 返 回上一頁下一頁3第二節(jié)第二節(jié) SQL的定義功能的定義功能 一、定義表的結(jié)構(gòu)一、定義表的結(jié)構(gòu)格式:格式: CREATE TABLE (字段屬性描述字段屬性描述) 該命令直接創(chuàng)建指定名稱的表的結(jié)構(gòu),各字段的名稱、類型、寬度等與括號中的描述相同。該命令直接創(chuàng)建指定名稱的表的結(jié)構(gòu),各字段的名稱、類型、寬度等與括號中的描述相同。如果此時有打開的數(shù)據(jù)庫,則建立的是數(shù)據(jù)庫表,否則是自由表。如果此時有打開的數(shù)據(jù)庫,則建立的是數(shù)據(jù)庫表,否則是自由表?!纠?.1】用】用SQL命令創(chuàng)建倉庫表(命令創(chuàng)建倉庫表(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倉庫號CKM字符型10倉庫名CHF邏輯型存貨否MJ數(shù)值型30面積上一頁下一頁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表添加一個管理員(表添加一個管理員(GLY)字段,類型為字符型,寬度)字段,類型為字符型,寬度位為位為8。 ALTER TABLE CKB ADD GLYGLY C(8)返 回上一頁下一頁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 說明:直接從磁盤上刪除指定的表。若是數(shù)據(jù)庫表,則必須先打開數(shù)據(jù)說明:直接從磁盤上刪除指定的表。若是數(shù)據(jù)庫表,則必須先打開數(shù)據(jù)庫。庫。 【例【例7.57.5】刪除刪除CKB表表 DROP TABLE CKB返 回上一頁下一頁6主要包括數(shù)據(jù)的插入(主要包括數(shù)據(jù)的插入(INSERT)、刪除()、刪除(DELETE)、更新()、更新(UPDATE)三種功)三
7、種功能。能。一、數(shù)據(jù)插入一、數(shù)據(jù)插入 SQL 的的INSERT命令用于向指定的表中追加一條記錄,無論該表是否已經(jīng)打命令用于向指定的表中追加一條記錄,無論該表是否已經(jīng)打開,也不必從鍵盤輸入數(shù)據(jù),而是直接把數(shù)據(jù)寫在命令中。該命令動詞是開,也不必從鍵盤輸入數(shù)據(jù),而是直接把數(shù)據(jù)寫在命令中。該命令動詞是INSERT,因此也叫因此也叫“插入命令插入命令”。 格式:格式: Insert into Insert into ( (字段字段1 1,字段,字段2 2,););Values (Values (表達(dá)式表達(dá)式1 1,表達(dá)式,表達(dá)式2 2,) 若只插入部分字段,必須在表名后用括號依次指明所插入的字段名,且與
8、若只插入部分字段,必須在表名后用括號依次指明所插入的字段名,且與VALUES后括號中表達(dá)式的值一一對應(yīng)。當(dāng)插入整條記錄時,則不必指出字段名,后括號中表達(dá)式的值一一對應(yīng)。當(dāng)插入整條記錄時,則不必指出字段名,但但VALUES后括號中表達(dá)式的值,必須依次為表內(nèi)所有字段的值。后括號中表達(dá)式的值,必須依次為表內(nèi)所有字段的值。返 回第三節(jié)第三節(jié) SQL的操縱功能的操縱功能上一頁下一頁7【例【例7.7】向】向XSQK表插入一條記錄,學(xué)號、姓名、班級分別是表插入一條記錄,學(xué)號、姓名、班級分別是“0801100204”,“王一王一”和和“流體力學(xué)流體力學(xué)”這三個值。這三個值。 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é)果。 返 回上一頁下一頁8二、刪除數(shù)據(jù)二、刪除數(shù)據(jù)格式:格式: DELETE FRO
10、M DELETE FROM WHERE WHERE 功能:功能:對指定表中滿足條件的記錄做刪除對指定表中滿足條件的記錄做刪除標(biāo)記標(biāo)記。如果不指定條。如果不指定條件,則對所有記錄添加刪除件,則對所有記錄添加刪除標(biāo)記標(biāo)記。 說明:此命令無須事先打開表,注意條件子句用說明:此命令無須事先打開表,注意條件子句用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=女女 返 回上一頁下一頁9三、三、 更新命令更新命令格式: UPDATE SET 字段名字段名1= ,字段名字段名2= WHERE 功能:對指定表中滿足條件的記錄,用指定表達(dá)式的值更新指定字段的值。功能:對指定表中滿足條件的記錄,用指定表達(dá)式的值更新指定字段的值。 說明:說明: 如果不指定條件如果不指定條件,該命令默認(rèn)的范圍為所有記錄。該命令默認(rèn)的范圍為所有記錄?!纠纠?.107.10】將將XSQK表中所有學(xué)生的入學(xué)成績都提高表中所有學(xué)生的入學(xué)成績都提高5分。分。 UPDATE XSQK SET RXCJRXCJ=RXCJ+5【例【例7.1
12、17.11】將將XSQK表中表中1990年及其以后出生的所有學(xué)生的入學(xué)成績都提年及其以后出生的所有學(xué)生的入學(xué)成績都提高高10分。分。 UPDATE XSQK SET RXCJRXCJ=RXCJ+10; WHERE YEAR(CSRQ)=1990四、四、SQL與與VFP命令對比命令對比 1、VFP需先打開表,需先打開表,SQL不用。不用。 2、SQL中要出現(xiàn)表名,中要出現(xiàn)表名,VFP除除USE和和SET RELATION外都不出表名。外都不出表名。返 回上一頁下一頁10 查詢功能是查詢功能是SQL的核心,的核心,SQL的查詢命令又稱為的查詢命令又稱為SELECT語句語句。一、一、SELECTSE
13、LECT命令的格式命令的格式SELECT ALLDISTINCT TOP n PERCENT; SELECT ALLDISTINCT TOP n PERCENT; 別名別名.ASAS , ,別名別名22ASAS ; ;FROM FROM 數(shù)據(jù)庫名數(shù)據(jù)庫名!ASAS,數(shù)據(jù)庫名數(shù)據(jù)庫名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 這條命令看起來很復(fù)雜,但其基本形式由這條命令看起來很復(fù)雜,但其基本形式由SELECT-FROM模塊構(gòu)成,模塊構(gòu)成,其余多為可選項,要根據(jù)查詢的需求去選用。其余多為可選項,要根據(jù)查詢的需求去選用。第四節(jié)第四節(jié) SQL的數(shù)據(jù)查詢的數(shù)據(jù)查詢返 回上一頁下一頁11二、基本查詢二、基本查詢 格式:格式:SELECTALL|DISTINCTFROM 1、查詢指定字段、查詢指定字段
15、【例【例7.12】 從學(xué)生情況表(從學(xué)生情況表(XSQK)中查詢所有學(xué)生的學(xué)號()中查詢所有學(xué)生的學(xué)號(XH)、姓名()、姓名(XM)、)、班級(班級(BJ)和入學(xué)成績()和入學(xué)成績(RXCJ)信息。)信息。 SELECT XH,XM,BJ,RXCJ FROM XSQK 【例【例7.13】查詢查詢成績表成績表(CJ)中的所有學(xué)生成績信息。中的所有學(xué)生成績信息。 SELECT SELECT * * FROM CJ &“ FROM CJ &“* *”為通配符,表示所有字段。為通配符,表示所有字段。 該命令等價于:該命令等價于: SELECT XH,KCDM,CJ FROM CJSE
16、LECT XH,KCDM,CJ FROM CJ 2 2、查詢經(jīng)過計算的列、查詢經(jīng)過計算的列 【例【例7.14】查詢學(xué)生情況表(】查詢學(xué)生情況表(XSQK)中所有學(xué)生的學(xué)號()中所有學(xué)生的學(xué)號(XH)、姓名()、姓名(XM)和)和年齡。年齡。SELECT XH,XM,YEAR(DATE()-YEAR(CSRQ) AS 年齡年齡 FROM XSQK 3、去掉重復(fù)值【例【例7.15】查詢學(xué)生情況表(】查詢學(xué)生情況表(XSQK)中所有學(xué)生的班級()中所有學(xué)生的班級(BJ),要求去掉重復(fù)信),要求去掉重復(fù)信息。息。 SELECT DISTINCT BJ FROM XSQK返 回上一頁下一頁12三、條件查
17、詢?nèi)l件查詢 在在SELECT語句中,查詢條件用語句中,查詢條件用WHERE子句來描述。主要有以下幾種子句來描述。主要有以下幾種情況:情況:1 1比較大小比較大小用于比較的運算符包括:用于比較的運算符包括:=,=,=,#、!=或或。【例【例7.16】查詢學(xué)生情況表】查詢學(xué)生情況表(XSQK)中所有男生的學(xué)號中所有男生的學(xué)號(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é)成績中入學(xué)
18、成績(RXCJ)多于多于565分(含)的分(含)的學(xué)生的學(xué)號學(xué)生的學(xué)號(XH)、姓名、姓名(XM)和入學(xué)成績和入學(xué)成績(RXCJ) 。 SELECT XH,XM,RXCJ FROM XSQK WHERE RXCJ=565SELECT XH,XM,RXCJ FROM XSQK WHERE RXCJ=5652多重條件多重條件使用邏輯運算符使用邏輯運算符AND、NOT和和OR可以進(jìn)行復(fù)合條件查詢??梢赃M(jìn)行復(fù)合條件查詢?!纠纠?.18】 查詢學(xué)生情況表查詢學(xué)生情況表(XSQK)中所有男生且入學(xué)成績中所有男生且入學(xué)成績(RXCJ)高于高于500分的學(xué)生的學(xué)號分的學(xué)生的學(xué)號(XH)、姓名、姓名(XM)和
19、入學(xué)成績和入學(xué)成績(RXCJ) 。 SELECT XH,XM,RXCJ FROM XSQK WHERE XB=SELECT XH,XM,RXCJ FROM XSQK WHERE XB=男男 AND RXCJ500 AND RXCJ500返 回上一頁下一頁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分別用來描述宇段值在分別用來描述宇段值在或不在指定范圍的條件。其中,或不在指定范圍的條件。其中,AND的左端給出查詢范圍的下限,的左端給出查詢范圍的下限,AND的的右端給出的是查詢范圍的上限。右端給出的是查詢范圍的上限?!纠纠?.20】 查詢學(xué)生情況表查詢學(xué)生情況表(XSQK)中入學(xué)成績中入學(xué)成績(RXCJ)在在550到到600分之間分之間的學(xué)生的學(xué)號的學(xué)生的學(xué)號(XH)、姓名、姓名(XM)和入學(xué)成績和入學(xué)成績(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確定集合確定集合 這里所說的集合是相同類型的常量所組成的集合。謂詞這里所說的集合是相同類型的常量所組成的集合。謂詞IN用來描述字用來描述字段的值屬于指定的集合,段的值屬于指定的集合,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)返 回上一頁下一頁145 5部分匹配查詢部分匹配查詢 LIKE是字符匹配運算符,進(jìn)行匹配運算時可以使用通配符是字符匹配運算符,進(jìn)行匹配運算時可以使用通配符“”和和下劃線下劃線“_”,其中,其中,“”表示表示0個或多個任意字符,個或多個任意字符,“_”表示表示1個任意字個任意字符。例如,第符。例如,第2個字符為個字符為B的字符串可以表示為的字符串可以表示為“_B”。LIKE的格式為:的格式為:LIKE【例【例7.227.22】查詢】查詢XSQKXSQK表中所有姓表中所有姓“張張”的學(xué)號(的學(xué)號(XHXH)和姓名()和姓名(XMX
23、M)。)。 SELECT XH,XM FROM XSQK WHERE XM LIKE SELECT XH,XM FROM XSQK WHERE XM LIKE 張張%四、四、 統(tǒng)計查詢統(tǒng)計查詢SQL提供了許多庫函數(shù),可以進(jìn)一步增強(qiáng)檢索功能,這些函數(shù)主要有:提供了許多庫函數(shù),可以進(jìn)一步增強(qiáng)檢索功能,這些函數(shù)主要有: COUNT(COUNT(列名列名| |* *) ) 按列統(tǒng)計記錄個數(shù)按列統(tǒng)計記錄個數(shù) SUM(SUM() ) 計算一列值的總和計算一列值的總和 AVG(AVG() ) 計算一列值的平均值計算一列值的平均值 MAX(MAX() ) 求一列值中的最大值求一列值中的最大值 MIN(MIN(
24、) ) 求一列值中的最小值求一列值中的最小值返 回上一頁下一頁15 如果指定如果指定DISTINCT,則表示在計算時要取消指定行或列中的重復(fù)值。,則表示在計算時要取消指定行或列中的重復(fù)值。使用使用SUM,AVG,MAX,MIN函數(shù)時,指定列必須是數(shù)值型。另外,在函數(shù)時,指定列必須是數(shù)值型。另外,在標(biāo)準(zhǔn)標(biāo)準(zhǔn)SQL中只能在中只能在SELECT子句和子句和HAVING短語中使用庫函數(shù)。短語中使用庫函數(shù)?!纠纠?.237.23】查詢成績表(】查詢成績表(CJCJ)中學(xué)號為)中學(xué)號為“0901100103”0901100103”的學(xué)生的學(xué)號的學(xué)生的學(xué)號(XHXH),總分和平均分。),總分和平均分。SE
25、LECT XH,SUM(CJ) AS 總分總分,AVG(CJ) AS 平均分平均分 FROM CJ;WHERE XH=0901100103【例【例7.247.24】查詢成績表(】查詢成績表(CJCJ)中課程代碼()中課程代碼(KCDMKCDM)為)為“150205”150205”的課程代的課程代碼,最高分和最低分。碼,最高分和最低分。SELECT KCDM,MAX(CJ) AS 最高分最高分,MIN(CJ) AS 最低分最低分 ;FROM CJ WHERE KCDM=150205【例【例7.257.25】統(tǒng)計成績表(】統(tǒng)計成績表(CJCJ)中有多少門課。)中有多少門課。SELECT COUNT
26、(DISTINCT KCDM) AS 課程數(shù)課程數(shù) FROM CJ【例【例7.267.26】統(tǒng)計】統(tǒng)計XSQKXSQK表中學(xué)生人數(shù)。表中學(xué)生人數(shù)。SELECT COUNT(*) AS 學(xué)生人數(shù)學(xué)生人數(shù) FROM XSQK 返 回上一頁下一頁16五、五、 分組查詢分組查詢 GROUP BY 子句可以將查詢結(jié)果按一列或多列值分組,列值相等的為子句可以將查詢結(jié)果按一列或多列值分組,列值相等的為一組,還可以利用一組,還可以利用HAVING短語按一定的條件對分組后的數(shù)據(jù)進(jìn)行篩選。短語按一定的條件對分組后的數(shù)據(jù)進(jìn)行篩選。GROUP BY子句一般應(yīng)跟在子句一般應(yīng)跟在 WHERE子句之后,沒有子句之后,沒有W
27、HERE子句時,跟在子句時,跟在FROM子句后。子句后。如果對分組有要求的話,則可以用如果對分組有要求的話,則可以用HAVING短語指定篩選條短語指定篩選條件。該短語必須與件。該短語必須與GROUP BY配合使用。需要強(qiáng)調(diào)的是,配合使用。需要強(qiáng)調(diào)的是,HAVING短語與短語與WHERE子句之間并不矛盾,子句之間并不矛盾,WHERE子句用于表的選擇運算,子句用于表的選擇運算,HAVING短短語用于設(shè)置分組的篩選條件,即滿足該條件的分組數(shù)據(jù)才被輸出。語用于設(shè)置分組的篩選條件,即滿足該條件的分組數(shù)據(jù)才被輸出?!纠纠?.27】查詢成績表(查詢成績表(CJCJ)中每門課程的課程代碼()中每門課程的課程
28、代碼(KCDMKCDM)、最高分和最)、最高分和最低分。低分。SELECT KCDM,MAX(CJ) AS 最高分最高分,MIN(CJ) AS 最低分最低分; FROM CJ GROUP BY KCDM【例【例7.28】查詢成績表(查詢成績表(CJCJ)中每名學(xué)生的學(xué)號()中每名學(xué)生的學(xué)號(XHXH)、最高分和最低分。)、最高分和最低分。SELECT XH,MAX(CJ)AS 最高分最高分,MIN(CJ) AS 最低分最低分 FROM CJ;GROUP BY XH返 回上一頁下一頁17【例【例7.29】 統(tǒng)計輸出班級人數(shù)超過統(tǒng)計輸出班級人數(shù)超過18(含)人的各班級的入學(xué)成績平均分。(含)人的各
29、班級的入學(xué)成績平均分。 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】在成績表(】在成績表(CJ)里查詢選修了)里查詢選修了“150104”和和“150205”的學(xué)生平的學(xué)生平均成績在均成績在80分及以上的學(xué)生的學(xué)號和平均成績。分及以上的學(xué)生的學(xué)號和平均成績。SELECT XH,KCDM,AVG(CJ) AS 平均成績平均成績 FROM CJ;WHERE
30、 KCDM IN (150104,150205) GROUP BY XH;HAVING AVG(CJ)=80六、查詢的排序六、查詢的排序 利用利用ORDER BY子句可以對查詢的結(jié)果按指定字段進(jìn)行排序。其中,子句可以對查詢的結(jié)果按指定字段進(jìn)行排序。其中,ASC表示升序,表示升序,DESC表示降序,缺省時表示升序。另外,利用該子句還表示降序,缺省時表示升序。另外,利用該子句還可以實現(xiàn)多重排序。可以實現(xiàn)多重排序?!纠纠?.31】查詢查詢學(xué)生情況表學(xué)生情況表(XSQK)中的學(xué)生信息,要求按入學(xué)成績由高到中的學(xué)生信息,要求按入學(xué)成績由高到低順序排序。低順序排序。 SELECT SELECT * *
31、FROM XSQK ORDER BY RXCJ DESC FROM XSQK ORDER BY RXCJ DESC返 回上一頁下一頁18【例【例7.32】查詢查詢學(xué)生情況表學(xué)生情況表(XSQK)中的學(xué)生學(xué)號(中的學(xué)生學(xué)號(XH)、姓名()、姓名(XM)、)、班級(班級(BJ)和入學(xué)成績()和入學(xué)成績(RXCJ)。要求查詢結(jié)果按班級升序排列,班級)。要求查詢結(jié)果按班級升序排列,班級相同再按入學(xué)成績降序排列。相同再按入學(xué)成績降序排列。 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)計輸出班級人數(shù)超過統(tǒng)計輸出班級人數(shù)超過18(含)人的各班級的入學(xué)成績平均分(含)人的各班級的入學(xué)成績平均分,并按平均分降序排列。并按平均分降序排列。 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如果用戶需要輸出滿足條件的前幾個記錄,可以使用以
33、下短語:如果用戶需要輸出滿足條件的前幾個記錄,可以使用以下短語: TOP PERCENT 其中,其中, 表示要顯示前幾個記錄的數(shù)目。若使用表示要顯示前幾個記錄的數(shù)目。若使用PERCENTPERCENT,則則 應(yīng)取應(yīng)取0.010.01至至99.9999.99間的實數(shù),表示要顯示所有查詢結(jié)果中間的實數(shù),表示要顯示所有查詢結(jié)果中的前百分之幾的記錄。的前百分之幾的記錄。注意,注意,TOPTOP短語要與短語要與ORDER BYORDER BY短語同時使用才有效。短語同時使用才有效?!纠纠?.34】 查詢?nèi)雽W(xué)成績最高的三位同學(xué)的姓名和入學(xué)成績。查詢?nèi)雽W(xué)成績最高的三位同學(xué)的姓名和入學(xué)成績。SELECT T
34、OP 3 XM,RXCJ FROM XSQK ORDER BY RXCJ DESCORDER BY RXCJ DESC返 回上一頁下一頁19【例【例7.35】查詢?nèi)雽W(xué)成績最低的】查詢?nèi)雽W(xué)成績最低的30%同學(xué)的姓名和入學(xué)成績。同學(xué)的姓名和入學(xué)成績。 SELECT TOP 30 PERCENT XM,RXCJ FROM XSQK; ORDER BY RXCJ DESC七、利用空值查詢七、利用空值查詢 在在SQL中可以查詢某字段取值為空中可以查詢某字段取值為空(NULL)的記錄,空值不同于零和空的記錄,空值不同于零和空格,它不占任何存儲空間,中是一個特殊的符號格,它不占任何存儲空間,中是一個特殊的符
35、號“NULL”。輸入。輸入NULL的的方法是復(fù)合鍵方法是復(fù)合鍵CTRL+0(零)。(零)?!纠纠?.36】查詢課程表(】查詢課程表(KCB)中沒有課程名稱的記錄信息。)中沒有課程名稱的記錄信息。 SELECT * FROM KCB WHERE KCMC IS NULL注:查詢空值時要使用注:查詢空值時要使用“IS NULL”,而,而“=NULL”是無效的,因為空值不是無效的,因為空值不是一個確定的值。是一個確定的值。八、連接查詢八、連接查詢 如果查詢涉及兩個或兩個以上的表,則需要將相關(guān)的表按某個字段連如果查詢涉及兩個或兩個以上的表,則需要將相關(guān)的表按某個字段連接起來,這種查詢稱為連接查詢(多
36、表查詢)接起來,這種查詢稱為連接查詢(多表查詢)。返 回上一頁下一頁201、等值連接查詢、等值連接查詢(1)2個表查詢條件格式個表查詢條件格式 表名表名1公共字段名公共字段名=表名表名2公共字段名公共字段名其中,引用不同表中的字段需在字段名前加表名和其中,引用不同表中的字段需在字段名前加表名和 “.”?!纠纠?.37a】 查詢查詢“趙剛趙剛”同學(xué)的學(xué)號、姓名,性別和成績。同學(xué)的學(xué)號、姓名,性別和成績。SELECT XSQK.XH,XM,XB,CJ FROM XSQK,CJ ;WHERE XSQK.XH=CJ.XH AND XM=趙剛趙剛(2)3個表查詢查詢條件格式個表查詢查詢條件格式表名表名
37、1公共字段名公共字段名1=表名表名2公共字段名公共字段名1 AND 表名表名2公共字段名公共字段名2=表表名名3公共字段名公共字段名2 【例【例7.37b 】 查詢查詢“趙剛趙剛”同學(xué)的學(xué)號、姓名,性別、選修的課程名稱和同學(xué)的學(xué)號、姓名,性別、選修的課程名稱和成績。成績。SELECT XSQK.XH,XM,XB,KCMC,CJ; FROM XSQK,CJ,KCB;WHERE CJ.KCDM=KCB.KCDM AND XSQK.XH=CJ.XH;AND XM=趙剛趙剛返 回上一頁下一頁212、超連接查詢、超連接查詢超連接查詢包括內(nèi)部連接、左連接、右連接和全連接等幾種情況的查詢。超連接查詢包括內(nèi)部
38、連接、左連接、右連接和全連接等幾種情況的查詢。這里只介紹內(nèi)連接。這里只介紹內(nèi)連接。格式如下:格式如下:(1 1)2個表查詢條件格式個表查詢條件格式FROM FROM 表名表名1 1INNER INNER JOIN JOIN 表名表名2 ON 2 ON 表名表名1.公共字段名公共字段名=表名表名2.公共字段名公共字段名可以看出,超連接查詢是通過可以看出,超連接查詢是通過FROM短語給出連接類型,用短語給出連接類型,用ON短語給出短語給出連接條件進(jìn)行的。連接條件進(jìn)行的。其中其中INNER 可以省略。可以省略?!纠纠?.37c 】 查詢查詢“趙剛趙剛”同學(xué)的學(xué)號、姓名,性別和成績。同學(xué)的學(xué)號、姓名
39、,性別和成績。SELECT XSQK.XH,XM,XB,CJ FROM XSQK JOIN CJ ;ON XSQK.XH=CJ.XH WHERE XM=趙剛趙剛(2 2)3個表查詢條件格式個表查詢條件格式FROM FROM 表名表名1 1 JOIN JOIN 表名表名2 JION 2 JION 表名表名3 ON 3 ON 表名表名2.公共字段名公共字段名=表名表名3.公共字公共字段名段名 ON 表名表名1.公共字段名公共字段名=表名表名2.公共字段名公共字段名 返 回上一頁下一頁22【例【例7.37d 】 查詢查詢“趙剛趙剛”同學(xué)的學(xué)號、姓名,性別、選修的課程名稱和同學(xué)的學(xué)號、姓名,性別、選修
40、的課程名稱和成績。成績。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子句條件中涉及字段與另一個子句條件中涉及字段與另一個SELECT查查詢結(jié)果的比較,詢結(jié)果的比較,也就是說,嵌套查詢是指在一個也就是說,嵌套查詢是指在一個SELECT語句中包含另一語句中包含另一個個SELECT語句的查詢。語句的查詢。SQL 支持嵌套查詢,這正是支持嵌套查詢,這正是SQ
41、L結(jié)構(gòu)化的具體體結(jié)構(gòu)化的具體體現(xiàn)?,F(xiàn)。 處于內(nèi)層的查詢稱為子查詢,處于外層的查詢稱為父查詢。處于內(nèi)層的查詢稱為子查詢,處于外層的查詢稱為父查詢。在子查詢在子查詢的的SELECT語句不能使用語句不能使用ORDER BY子句,即子句,即ORDER BY子句只能對最終子句只能對最終查詢結(jié)果排序。查詢結(jié)果排序。1、返回一個值的子查詢、返回一個值的子查詢 當(dāng)子查詢的返回值只有一個時,可以使用當(dāng)子查詢的返回值只有一個時,可以使用,=,=,!=或或 等等比較運算符將父查詢和子查詢連接起來。比較運算符將父查詢和子查詢連接起來。返 回上一頁下一頁23【例【例7.38 】 從成績表中查詢從成績表中查詢“趙剛趙剛”
42、同學(xué)的考試成績信息,要求顯示同學(xué)的考試成績信息,要求顯示CJ表表的所有字段。的所有字段。SELECT * FROM CJ ;WHERE XH=(SELECT XH FROM XSQK WHERE XM=趙剛趙剛)2、返回一組值的子查詢、返回一組值的子查詢?nèi)绻硬樵兊姆祷刂挡恢挂粋€,而是一個集合時,則不能直接使用比較運如果子查詢的返回值不止一個,而是一個集合時,則不能直接使用比較運算符,可以在運算符和子查詢之間插入算符,可以在運算符和子查詢之間插入ANY、SOME、ALL。WHERE子句中的條件書寫格式為:子句中的條件書寫格式為: ANY|SOME|ALL(ANY|SOME|ALL(子查詢子查詢
43、) )其中,其中,ANY和和SOME是作用相同的謂詞。是作用相同的謂詞。ANY代表某個值,代表某個值,ALL代表所有代表所有值。從上述格式可以看出,使用謂詞值。從上述格式可以看出,使用謂詞ANY或或ALL時必須同時使用比較運算時必須同時使用比較運算符。例如,符。例如, ANYANY的語義為:大于子查詢結(jié)果中的某個值。的語義為:大于子查詢結(jié)果中的某個值。 ALLALL的語義為:大于子查詢結(jié)果中的所有值。的語義為:大于子查詢結(jié)果中的所有值。由于子查詢的結(jié)果是記錄的集合,故也可使用謂詞由于子查詢的結(jié)果是記錄的集合,故也可使用謂詞IN來實現(xiàn)。來實現(xiàn)。返 回上一頁下一頁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é)成績最高分的女生的姓名和入學(xué)成績?!坎樵兏哂谀猩雽W(xué)成績最高分的女生的姓名和入學(xué)成績。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=女女返 回上一頁下一頁25EXISTS也稱為存在量詞,也稱為存在量詞,WHERE子句中使用量詞子句中使用量詞EXISTS表示當(dāng)子查詢的表示當(dāng)子查詢的結(jié)果非空時,條件為真:反之,則為假。結(jié)果非空時,條件為真:反之,則為假。EXISTS前也可以加前也可以加NOT,表示檢測,表示檢測條件為條件為“不存在不存在”?!纠?/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語句中使用語句中使用INTO TABLEINTO TABLE 短語,則可以將查詢的結(jié)果存放短語,則可以將查詢的結(jié)果存放到表中,該表是自由表。到表中,該表是自由表。2、將查詢結(jié)果存入臨時文件中、將查詢結(jié)果存入臨時文件中 若在若在SELECTSELECT語句中使用語句中使用IN
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《課間活動》(教案)2024-2025學(xué)年數(shù)學(xué)二年級上冊
- 2025年美容院會員協(xié)議模板
- 學(xué)習(xí)2025年雷鋒精神六十二周年主題活動方案 合計3份
- 2025年青海省安全員A證考試題庫
- 《游山西村》歷年中考古詩欣賞試題匯編(截至2024年)
- 全國河大音像版初中信息技術(shù)七年級下冊第一章第二節(jié)《文字素材的采集》教學(xué)設(shè)計
- 歷史-云南省師范大學(xué)附屬中學(xué)2025屆高三下學(xué)期開學(xué)考試試題和答案
- 2025年??谑袉握新殬I(yè)適應(yīng)性測試題庫附答案
- 2025年度兒童游樂場主題包裝與品牌推廣合作協(xié)議書
- 2025年度個人公司資金走賬專項管理合同協(xié)議
- 2024年知識競賽-煙花爆竹安全管理知識競賽考試近5年真題附答案
- 民航基礎(chǔ)知識應(yīng)用題庫100道及答案解析
- 2024年黑龍江省哈爾濱市中考數(shù)學(xué)試卷(附答案)
- 2025年全國計算機(jī)二級考試模擬考試題庫及答案(共280題)
- JJF(鄂) 143-2024 路面材料強(qiáng)度試驗儀校準(zhǔn)規(guī)范
- 臺州事業(yè)單位筆試真題2024
- 父母房產(chǎn)繼承協(xié)議書范本
- 51個行業(yè)領(lǐng)域重大事故隱患判定標(biāo)準(zhǔn)和重點檢查事項匯編
- 2024年高二化學(xué)教案 選擇性必修2(配人教版)第1課時原子結(jié)構(gòu)與性質(zhì)
- 2024-2030年中國空氣閥行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 人工智能(人工智能大數(shù)據(jù)技術(shù)相關(guān)專業(yè))全套教學(xué)課件
評論
0/150
提交評論