數(shù)據(jù)庫(kù)原理與應(yīng)用1第5章數(shù)據(jù)查詢_第1頁(yè)
數(shù)據(jù)庫(kù)原理與應(yīng)用1第5章數(shù)據(jù)查詢_第2頁(yè)
數(shù)據(jù)庫(kù)原理與應(yīng)用1第5章數(shù)據(jù)查詢_第3頁(yè)
數(shù)據(jù)庫(kù)原理與應(yīng)用1第5章數(shù)據(jù)查詢_第4頁(yè)
數(shù)據(jù)庫(kù)原理與應(yīng)用1第5章數(shù)據(jù)查詢_第5頁(yè)
已閱讀5頁(yè),還剩125頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Mail:yrmeixue@12025/6/914:40第5章數(shù)據(jù)查詢5.1基本查詢5.2多表查詢Mail:yrmeixue@22025/6/914:405.1

基本查詢Mail:yrmeixue@32025/6/914:40SELECT語(yǔ)句的結(jié)構(gòu)SELECT

[ALL|DISTINCT]

[TOPn[PERCENT]

<目標(biāo)列表達(dá)式>[,…n]FROM<表名>|<視圖名>[,…n][WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];指定要顯示的屬性列指定查詢對(duì)象(基本表或視圖)指定查詢條件對(duì)查詢結(jié)果按指定列的值分組篩選出滿足指定條件的組對(duì)查詢結(jié)果表按指定列值排序[INTO<新表名>]將查詢到的數(shù)據(jù)插入新表Mail:yrmeixue@42025/6/914:40SELECT語(yǔ)句的結(jié)構(gòu)SELECTA1,…AnFROMR1,…RmWHEREFMail:yrmeixue@52025/6/914:40簡(jiǎn)單查詢Mail:yrmeixue@62025/6/914:40查詢所有數(shù)據(jù)SELECTA1,…AnFROMRSELECT*FROMRMail:yrmeixue@72025/6/914:40查詢所有數(shù)據(jù)[例5.1]查詢?nèi)w學(xué)生的詳細(xì)信息SELECT*FROMSSELECTSNo,SName,Sex,BirthYear,Sdept,SClassFROMS;Mail:yrmeixue@82025/6/914:40查詢所有數(shù)據(jù)[例5.1]查詢?nèi)w學(xué)生的詳細(xì)信息Mail:yrmeixue@92025/6/914:40顯示所有列,有限行SELECT語(yǔ)句中使用TOPn關(guān)鍵字輸出查詢結(jié)果集的前n行;使用TOPnPERCENT輸出查詢結(jié)果集的前面一部分,n為輸出元組總數(shù)占結(jié)果集總元數(shù)的百分比。Mail:yrmeixue@102025/6/914:40顯示所有列,有限行[例5.2]要查看一下TMS數(shù)據(jù)庫(kù)中,表S的數(shù)據(jù)組成情況,可通過(guò)列出該表前5行的所有列來(lái)了解SELECTTOP5*FROMSMail:yrmeixue@112025/6/914:40顯示所有列,有限行[例5.3]查詢學(xué)生表中前面20%的學(xué)生的信息SELECTTOP20PERCENT*FROMSMail:yrmeixue@122025/6/914:40選擇表中特定的列SELECTA1,…AnFROMR注意:SELECT列名列表中的列名必須用逗號(hào)分開(kāi),逗號(hào)前、后有沒(méi)有空

格都可以。Mail:yrmeixue@132025/6/914:40選擇表中特定的列[例5.4]要查看全體學(xué)生的學(xué)號(hào)、姓名和出生年份SELECTSNO,SNAME,BIRTHYEARFROMS;Mail:yrmeixue@142025/6/914:40對(duì)結(jié)果表進(jìn)行排序使用ORDERBY子句

可以按一個(gè)或多個(gè)屬性列排序

升序:ASC;降序:DESC;缺省值為升序

當(dāng)排序列含空值時(shí)ASC:排序列為空值的元組最先顯示

DESC:排序列為空值的元組最后顯示Mail:yrmeixue@152025/6/914:40對(duì)結(jié)果表進(jìn)行排序[例5.6]例5.4的查詢結(jié)果,首先按出生年份降序,再按學(xué)號(hào)升序排列SELECTSNO,SNAME,BIRTHYEARFROMSORDERBYBIRTHYEARDESC,SNOASCMail:yrmeixue@162025/6/914:40對(duì)結(jié)果表進(jìn)行排序ORDERBY子句中的列可以是列名,也可以是一個(gè)整數(shù),該數(shù)表示相應(yīng)的列在SELECT子句目標(biāo)列中的位置。如例5.6中的ORDERBY子句可以有下列幾種等價(jià)形式:ORDERBY3DESC,1ASC;ORDERBYBIRHYEAR,1ASC;ORDERBY3DESC,SNOASC;Mail:yrmeixue@172025/6/914:40對(duì)結(jié)果表進(jìn)行排序[例5.6]例5.4的查詢結(jié)果,首先按出生年份降序,再按學(xué)號(hào)升序排列SELECTSNO,SNAME,BIRTHYEARFROMSORDERBYBIRTHYEARDESC,SNOASCORDERBY3DESC,1ASC;或ORDERBYBIRHYEAR,1ASC;或ORDERBY3DESC,SNOASC;123Mail:yrmeixue@182025/6/914:40查詢經(jīng)過(guò)計(jì)算的值

SELECT子句的<目標(biāo)列表達(dá)式>為表達(dá)式

算術(shù)表達(dá)式……

字符串常量函數(shù)(P106)

列別名Mail:yrmeixue@192025/6/914:40查詢經(jīng)過(guò)計(jì)算的值[例5.7]查詢?nèi)w學(xué)生的姓名及其年齡SELECTSNAME,‘年齡:’,YEAR(GETDATE())-BIRTHYEARFROMS字符串常量Mail:yrmeixue@202025/6/914:40查詢經(jīng)過(guò)計(jì)算的值在SELECT子句中可以通過(guò)以下四種方式來(lái)定義列別名:使用AS關(guān)鍵字,如SELECT

SNOAS學(xué)號(hào)FROMS;帶單引號(hào)的列別名,如SELECTSNO'學(xué)號(hào)'FROMS;帶雙引號(hào)的列別名,如SELECTSNO"學(xué)號(hào)"FROMS;不帶引號(hào)的列別名,如SELECTSNO學(xué)號(hào)FROMS。Mail:yrmeixue@212025/6/914:40查詢經(jīng)過(guò)計(jì)算的值例5.7的查詢也可以用下面語(yǔ)句完成:SELECTSNAMENAME,‘年齡:’‘AGEOFSTUDENT’,YEAR(GETDATE())-BIRTHYEARASAGEFROMSMail:yrmeixue@222025/6/914:40禁止結(jié)果表返回重復(fù)行[例5.8]列出學(xué)生表中所有系名SELECTSDEPTFROMSSELECTDISTINCTSDEPTFROMSMail:yrmeixue@232025/6/914:40查詢滿足給定條件的元組指定查詢條件SELECT

[ALL|DISTINCT]

<目標(biāo)列表達(dá)式>[,…n>]FROM<表名>|<視圖名>[,…n][WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];[INTO<新表名>]Mail:yrmeixue@242025/6/914:40查詢滿足給定條件的元組查詢條件謂詞比較=,>,<,>=,<=,<>邏輯運(yùn)算符AND,OR,NOT謂詞IN,BETWEENAND,LIKE,空值ISNULLMail:yrmeixue@252025/6/914:40比較操作

WHERE子句的<比較條件>中使用比較運(yùn)算符

=,>,<,>=,<=,!=或<>,!>,!<,邏輯運(yùn)算符NOT+比較運(yùn)算符列名運(yùn)算符常數(shù)列名運(yùn)算符列名注:比較字符型的列,該值必須用單引號(hào)引起來(lái)對(duì)字符的比較是大小寫(xiě)敏感的Mail:yrmeixue@262025/6/914:40比較操作[例5.9]查詢軟件學(xué)院全體學(xué)生的名單SELECTSNAMEFROMSWHERESDEPT=‘軟件’;Mail:yrmeixue@272025/6/914:40比較操作[例5.9]查詢軟件學(xué)院全體學(xué)生的名單truefalsefalse……Mail:yrmeixue@282025/6/914:40比較操作[例5.9]查詢軟件學(xué)院全體學(xué)生的名單SELECTSNAMEFROMSWHERESDEPT=‘軟件’;Mail:yrmeixue@292025/6/914:40比較操作[例5.10]查詢?cè)?999年以前出生的(不包括1999)的學(xué)生姓名及出生年份SELECTSNAME,BIRTHYEARFROMSWHEREBIRTHYEAR<1999或

NOTBIRTHYEAR>=1999;Mail:yrmeixue@302025/6/914:40比較大小[練習(xí)]查詢所有考試成績(jī)不及格的學(xué)生學(xué)號(hào)SelectdistinctSnoFromSCWhereGrade<60Mail:yrmeixue@312025/6/914:40復(fù)合條件查詢

用邏輯運(yùn)算符AND和OR來(lái)聯(lián)結(jié)多個(gè)查詢條件

AND的優(yōu)先級(jí)高于OR

可以用括號(hào)改變優(yōu)先級(jí)無(wú)底紋OR圓形無(wú)底紋AND圓形YYRRYRYYRYYMail:yrmeixue@322025/6/914:40復(fù)合條件查詢[例5.11]查詢出生在1998年至2000年之間的學(xué)生姓名、所在系和出生年份SELECTSNAME,SDEPT,BIRTHYEARFROMSWHEREBIRTHYEAR>=1998ANDBIRTHYEAR<=2000;Mail:yrmeixue@332025/6/914:40復(fù)合條件查詢[例5.12]查詢軟件學(xué)院、機(jī)械學(xué)院和交通學(xué)院的學(xué)生姓名和所在學(xué)院名SELECTSNAME,SDEPTFROMSWHERESDEPT='軟件'ORSDEPT='機(jī)械'ORSDEPT='交通';Mail:yrmeixue@342025/6/914:40復(fù)合條件查詢[練習(xí)]查詢軟件學(xué)院和機(jī)械學(xué)院的女生姓名和所在學(xué)院SELECTSNAME,SEX,SDEPTFROMSWHERE(SDEPT='軟件'ORSDEPT='機(jī)械')ANDSEX='女';Mail:yrmeixue@352025/6/914:40謂詞SQL中的謂詞指的是:返回值是邏輯值的函數(shù)。對(duì)于函數(shù)來(lái)說(shuō)返回值可以是數(shù)字、字符串或者日期等等,但謂詞的返回值全部是邏輯值(TRUE/FALSE/UNKNOW),謂詞是一種特殊的函數(shù)。Mail:yrmeixue@362025/6/914:40IN謂詞這個(gè)值可以是數(shù)字、字符、日期或時(shí)間。字符、日期或時(shí)間必須用單引號(hào)引起來(lái)。IN(<值表>)NOTIN(<值表>)<值表>:用逗號(hào)分隔的一組取值用來(lái)確定一個(gè)值是否屬于一個(gè)集合Mail:yrmeixue@372025/6/914:40IN謂詞[例5.13]查詢軟件學(xué)院、機(jī)械學(xué)院和交通學(xué)院的學(xué)生姓名和所在學(xué)院名SELECTSNAME,SDEPTFROMSWHERESDEPT='軟件'ORSDEPT='機(jī)械'ORSDEPT='交通';SELECTSNAME,SDEPTFROMSWHERESDEPTIN('軟件','機(jī)械',交通');Mail:yrmeixue@382025/6/914:40IN謂詞[練習(xí)]查詢既不是軟件學(xué)院也不是機(jī)械學(xué)院的學(xué)生姓名和所在學(xué)院名SelectSName,SdeptFromSWhereSdept<>‘軟件’andSdept<>‘機(jī)械’SelectSName,SdeptFromSWhereSdeptNOTIN('軟件','機(jī)械')Mail:yrmeixue@392025/6/914:40BETWEEN謂詞BETWEEN…AND…NOTBETWEEN…AND…注:BETWEEN后面的值要小于等于AND后面的值在WHERE子句中用BETWEEN謂詞可以判斷一個(gè)值是否在按升序給定的兩個(gè)值之間(包括和這兩個(gè)值相等)Mail:yrmeixue@402025/6/914:40BETWEEN謂詞[例5.14]查詢出生在1998年至2000年之間的學(xué)生姓名、所在系和出生年份SELECTSNAME,SDEPT,BIRTHYEARFROMSWHEREBIRTHYEAR>=1998ANDBIRTHYEAR<=2000;SELECTSNAME,SDEPT,BIRTHYEARFROMSWHEREBIRTHYEARBETWEEN1998AND2000;Mail:yrmeixue@412025/6/914:40空值(NULL)應(yīng)用NULL只和IS或ISNOT進(jìn)行邏輯運(yùn)算

它既不是數(shù)字0,也不是空串‘’Mail:yrmeixue@422025/6/914:40空值(NULL)應(yīng)用SelectSNO,CNOfromSCwhereGRADE=NULLGRADEISNULL[例5.15]

查詢成績(jī)?yōu)榭盏膶W(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)Mail:yrmeixue@432025/6/914:40空值(NULL)應(yīng)用[練習(xí)]查詢所有有成績(jī)的學(xué)生學(xué)號(hào)和相應(yīng)的課程號(hào)及成績(jī)SelectSNo,CNo,GradeFromSCWhereGradeisnotnull;Mail:yrmeixue@442025/6/914:40LIKE謂詞謂詞LIKE用來(lái)進(jìn)行字符的匹配,語(yǔ)法格式如下:[思考]查詢姓王的同學(xué)的姓名和所在學(xué)院屬性列[NOT]LIKE‘<匹配串>’[ESCAPE‘<換碼字符>’]Mail:yrmeixue@452025/6/914:40LIKE謂詞謂詞LIKE用來(lái)進(jìn)行字符的匹配,語(yǔ)法格式如下:屬性列[NOT]LIKE‘<匹配串>’[ESCAPE‘<換碼字符>’]%(百分號(hào))代表任意長(zhǎng)度(長(zhǎng)度可以為0)的字符串例:a%b表示以a開(kāi)頭,以b結(jié)尾的任意長(zhǎng)度的字符串。

如acb,addgb,ab等都滿足該匹配串_(下橫線)代表任意單個(gè)字符例:a_b表示以a開(kāi)頭,以b結(jié)尾的長(zhǎng)度為3的任意字符串。

如acb,afb等都滿足該匹配串Mail:yrmeixue@462025/6/914:40LIKE謂詞[例5.16]查詢姓王的同學(xué)的姓名和所在學(xué)院SELECTSNAME,SDEPTFROMSWHERESNAMELIKE'王%'Mail:yrmeixue@472025/6/914:40LIKE謂詞[練習(xí)]查詢不是2018級(jí)的學(xué)生學(xué)號(hào)和姓名SELECTSNO,SNAMEFROMSWHERESNONOTLIKE'2018%';Mail:yrmeixue@482025/6/914:40LIKE謂詞[練習(xí)]查詢課程名為DB_Design的課程的課程名和任課教師SelectCName,TNameFromCWhereCNamelike‘DB_Design’CName=‘DB_Design’Mail:yrmeixue@492025/6/914:40LIKE謂詞[思考]查詢以“DB_”開(kāi)頭,且倒數(shù)第3個(gè)字符為i的課程的詳細(xì)情況Select*FromCWhereCNamelike‘DB_%i__’Mail:yrmeixue@502025/6/914:40LIKE謂詞屬性列[NOT]LIKE‘<匹配串>’[ESCAPE‘<換碼字符>’]當(dāng)用戶要查詢的字符串本身就含有%或_時(shí),要使用ESCAPE‘<換碼字符>’短語(yǔ)對(duì)通配符進(jìn)行轉(zhuǎn)義Mail:yrmeixue@512025/6/914:40LIKE謂詞[例5.17]查詢以“DB_”開(kāi)頭,且倒數(shù)第3個(gè)字符為i的課程的詳細(xì)情況Select*FromCWhereCNamelike'DB\_%i__'escape'\'¥、&、$……¥、&、$……或WhereCNamelike'DB@_%i__'escape'@';Mail:yrmeixue@522025/6/914:40LIKE謂詞[練習(xí)]查詢課程名以“A”開(kāi)頭、以“%DB”結(jié)尾的課程的詳細(xì)情況Select*FromCWhereCNamelike‘A%\%DB’escape‘\’Mail:yrmeixue@532025/6/914:40聚合函數(shù)與分組

SELECT

[ALL|DISTINCT]

[TOPn[PERCENT]

<目標(biāo)列表達(dá)式>[,…n]FROM<表名>|<視圖名>[,…n][WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];[INTO<新表名>]對(duì)查詢結(jié)果按指定列的值分組篩選出滿足指定條件的組Mail:yrmeixue@542025/6/914:40聚合函數(shù)

聚合函數(shù)是涉及整個(gè)關(guān)系的一類運(yùn)算操作。通過(guò)聚合函數(shù),可以把某一列中的值形成單個(gè)值。GradeMail:yrmeixue@552025/6/914:40聚合函數(shù)

統(tǒng)計(jì)函數(shù)(參數(shù)默認(rèn)ALL)AVG(ALL|DISTINCT列名)取均值A(chǔ)VG(AGE)COUNT(ALL|DISTINCT列名)行數(shù)COUNT(DISTINCTAGE)MAX(ALL|DISTINCT列名)最大值MAX(AGE)MIN(ALL|DISTINCT列名)最小值MIN(AGE)SUM(ALL|DISTINCT列名)總和SUM(AGE)COUNT(*)

統(tǒng)計(jì)元組的個(gè)數(shù)COUNT(列名)統(tǒng)計(jì)一列中值的個(gè)數(shù)COUNT(distinct列名)統(tǒng)計(jì)一列中的值的個(gè)數(shù)(不含重復(fù)值)Mail:yrmeixue@562025/6/914:40聚合函數(shù)

[例5.18]聚合函數(shù)COUNT()的幾種使用方式的比較SELECTCOUNT(*)'COUNT(*)',

COUNT(GRADE)'COUNT(GRADE)',

COUNT(DISTINCTGRADE)'COUNT(DISTINCTGRADE)'FROMSCMail:yrmeixue@572025/6/914:40聚合函數(shù)

[例5.19]查詢女生的人數(shù)SELECTCOUNT(*)FROMSWHERESEX='女'Mail:yrmeixue@582025/6/914:40聚合函數(shù)

[例5.20]查詢0211號(hào)課課程的選課人數(shù)、平均成績(jī)、最高成績(jī)、最低成績(jī)SELECTCOUNT(SNO)AS選課人數(shù),AVG(GRADE)AS平均成績(jī), MAX(GRADE)AS最高成績(jī), MIN(GRADE)AS最低成績(jī)FROMSCWHERECNO='0211'Mail:yrmeixue@592025/6/914:40簡(jiǎn)單分組查詢GROUPBY子句將查詢結(jié)果表的各行按一列或多列取值相等的原則進(jìn)行分組。使用GROUPBY子句時(shí),一個(gè)聚合函數(shù)對(duì)每組生成一個(gè)值。注意:對(duì)查詢結(jié)果分組的目的是為了細(xì)化聚合函數(shù)的作用對(duì)象。

如果未對(duì)查詢結(jié)果分組,聚合函數(shù)將作用于整個(gè)查詢結(jié)果。2025/6/914:40Mail:yrmeixue@60簡(jiǎn)單分組查詢[例5.21]查詢學(xué)生表中男、女生各多少人SELECTSEXAS性別,COUNT(SNO)AS人數(shù)FROMSGROUPBYSEX2025/6/914:40Mail:yrmeixue@61簡(jiǎn)單分組查詢[例5.22]查詢每門課程的選課人數(shù),列出課程號(hào)及相應(yīng)的人數(shù)SELECTCNOAS課程號(hào),COUNT(SNO)AS選課人數(shù)FROMSCGROUPBYCNO;2025/6/914:40Mail:yrmeixue@62簡(jiǎn)單分組查詢[例5.23]查詢每個(gè)學(xué)院的男、女生各多少人SELECTSDEPT,SEX,COUNT(SNO)FROMSGROUPBYSDEPT,SEXORDERBYSDEPT;Mail:yrmeixue@632025/6/914:40帶HAVING子句的分組查詢?nèi)绻纸M后還要求按一定的條件對(duì)這些組進(jìn)行篩選,最終只輸出滿足指定條件的組,則可以使用HAVING短語(yǔ)指定篩選條件。Mail:yrmeixue@642025/6/914:40帶HAVING子句的分組查詢[例5.24]查詢選修了2門以上課程的學(xué)生學(xué)號(hào)SELECTSNOFROMSCGROUPBYSNOHAVINGCOUNT(CNO)>2;Mail:yrmeixue@652025/6/914:40帶HAVING子句的分組查詢[練習(xí)]查詢平均成績(jī)大于70的學(xué)生學(xué)號(hào)SelectSNoFromSCgroupbySNohavingavg(Grade)>70Mail:yrmeixue@662025/6/914:40分組查詢

和聚合函數(shù)相關(guān)的語(yǔ)句要求:如果有GROUPBY子句,SELECT子句列表只能是聚合函數(shù)和GROUPBY子句指定的列構(gòu)成。在HAVING子句中可以在表中任何一列上使用聚合函數(shù),該列可以不出現(xiàn)在SELECT子句中;聚合函數(shù)不能嵌套使用;聚合函數(shù)可以用在SELECT子句中,也可以用在HAVING子句中;Mail:yrmeixue@672025/6/914:40分組查詢

如果有GROUPBY子句,SELECT子句列表只能是聚合函數(shù)和GROUPBY子句指定的列構(gòu)成;SelectCOUNT(SName),SexFromSGroupbySexMail:yrmeixue@682025/6/914:40分組查詢

如果有GROUPBY子句,SELECT子句列表只能是聚合函數(shù)和GROUPBY子句指定的列構(gòu)成;SelectSexFromSGroupbySexSelectSName,sexFromSGroupbySexMail:yrmeixue@692025/6/914:40分組查詢

如果有GROUPBY子句,SELECT子句列表只能是合集函數(shù)和GROUPBY子句指定的列構(gòu)成;SelectSName,SexFromSGroupbySexMail:yrmeixue@702025/6/914:40分組查詢

如果有GROUPBY子句,SELECT子句列表只能是聚合函數(shù)和GROUPBY子句指定的列構(gòu)成;SelectSName,SexFromSGroupbySName,Sex√Mail:yrmeixue@712025/6/914:40分組查詢

如果有GROUPBY子句,SELECT子句列表只能是聚合函數(shù)和GROUPBY子句指定的列構(gòu)成;SelectCOUNT(SName),SexFromSGroupbySex√Mail:yrmeixue@722025/6/914:40輸出結(jié)果選項(xiàng)SELECT

[ALL|DISTINCT][TOPn[PERCENT]<目標(biāo)列表達(dá)式>[,…n]FROM<表名>|<視圖名>[,…n][WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];[INTO<新表名>]Mail:yrmeixue@732025/6/914:40輸出結(jié)果選項(xiàng)SELECT語(yǔ)句中的INTO子句用于把查詢結(jié)果存放到一個(gè)新建的表中.新建表名由<新表名>給出,新建表的列由SELECT子句中指定的列構(gòu)成。Mail:yrmeixue@742025/6/914:40輸出結(jié)果選項(xiàng)[例5.25]將所有女生的學(xué)號(hào)、姓名和所在院系存入表S_FEMALE中SELECTSNO,SNAME,SDEPTINTOS_FEMALEFROMSWHERESEX=’女’注:INTO語(yǔ)句使得系統(tǒng)創(chuàng)建了一個(gè)新表S_FEMALEMail:yrmeixue@752025/6/914:40SELECT語(yǔ)句完整語(yǔ)法SELECT<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>][INTO<新表名>]FROM<表或視圖名>[,<表或視圖名>][WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];Mail:yrmeixue@762025/6/914:40SELECT語(yǔ)句完整語(yǔ)法Select

SNo,avg(Grade)‘Avgofscore'From

SCWhere

SNo<>‘20180201'groupby

SNoHaving

avg(Grade)>70orderby

2

Mail:yrmeixue@772025/6/914:40SELECT語(yǔ)句執(zhí)行順序Mail:yrmeixue@782025/6/914:40SELECT語(yǔ)句執(zhí)行順序FromWhereGroupbyHavingSelectOrderby123456思考:列的別名可以用在哪些語(yǔ)句中?Mail:yrmeixue@792025/6/914:40小結(jié)-基本查詢Mail:yrmeixue@802025/6/914:406.2

多表查詢同時(shí)涉及兩個(gè)或兩個(gè)以上的表的查詢連接查詢子查詢Mail:yrmeixue@812025/6/914:40連接查詢關(guān)系型數(shù)據(jù)庫(kù)中最主要的查詢,主要包括:交叉連接內(nèi)連接外連接Mail:yrmeixue@822025/6/914:40交叉連接也稱為笛卡爾積,當(dāng)不指定連接條件時(shí),則返回FROM子句中列出的表中行的所有組合,即使這些行可能完全不相關(guān),我們稱這種連接為交叉連接,連接查詢的結(jié)果稱為表的交叉積。

Select<目標(biāo)列表達(dá)式>From<表1>CROSSJOIN<表2>Mail:yrmeixue@832025/6/914:40交叉連接[例5.27]查詢所有學(xué)生可能的選課情況。SelectSNAME,CNAMEFromSCROSSJOINC……Mail:yrmeixue@842025/6/914:40連接查詢?cè)诙啾聿樵冎校绻貌煌P(guān)系中的同名屬性,則需要在屬性名前加關(guān)系名,即用“關(guān)系名.屬性名”的形式表示,以便區(qū)分。Mail:yrmeixue@852025/6/914:40內(nèi)連接內(nèi)連接是從兩個(gè)表的笛卡爾積中,選出符合連接條件的元組。

Select<目標(biāo)列表達(dá)式>[,…n]From<表1>INNERJOIN<表2>

On<連接條件表達(dá)式>[,…n]它使用INNERJOIN連接運(yùn)算符,并且使用ON關(guān)鍵字指定連接條件。Mail:yrmeixue@862025/6/914:40內(nèi)連接注意:內(nèi)連接是一種常用的連接方式,如果在JOIN關(guān)鍵字前面沒(méi)有指定連接類型,那么默認(rèn)的連接類型就是內(nèi)連接。連接條件表達(dá)式中的各連接字段類型必須是可比的,但名稱不必相同。Mail:yrmeixue@872025/6/914:40內(nèi)連接[例5.28]查找所有學(xué)生的學(xué)號(hào)、姓名和他們所選的課程號(hào)及成績(jī)SELECTS.SNO,SNAME,CNO,GRADEFROMSJOINSCONS.SNO=SC.SNOMail:yrmeixue@882025/6/914:40內(nèi)連接[例5.29]查詢選修了0211號(hào)課程的學(xué)生姓名和該門課程的成績(jī)SELECTSNAME,GRADEFROMSJOINSCONS.SNO=SC.SNOWHERECNO='0211'Mail:yrmeixue@892025/6/914:40內(nèi)連接[練習(xí)]查詢選修了數(shù)據(jù)庫(kù)原理的學(xué)生學(xué)號(hào)。SelectSNoFromSCINNERJOINCONSC.CNo=C.CnoWhereCName=‘?dāng)?shù)據(jù)庫(kù)原理’Mail:yrmeixue@902025/6/914:40內(nèi)連接[例5.29]查詢選修了0211號(hào)課程的學(xué)生姓名和該門課程的成績(jī)SELECTSNAME,GRADEFROMSJOINSCONS.SNO=SC.SNOWHERECNO='0211'Mail:yrmeixue@912025/6/914:40內(nèi)連接[例5.30]查詢選修了0211號(hào)課程的學(xué)生姓名和該門課程的課程名和成績(jī)SELECTSNAME,CNAME,GRADEFROMSJOINSCONS.SNO=SC.SNOJOINCONSC.CNO=C.CNOWHEREC.CNO='0211'SELECTSNAME,CNAME,GRADEFROMSJOINSCONS.SNO=SC.SNOANDCNO='0211'JOINCONSC.CNO=C.CNOMail:yrmeixue@922025/6/914:40內(nèi)連接[練習(xí)]查詢軟件學(xué)院的學(xué)生所選課程的課程號(hào)和平均成績(jī)SelectCNo,AVG(grade)as'Average'FromSinnerjoinSCOnS.SNo=SC.SNoWhereSdept='軟件'GroupbyCNoMail:yrmeixue@932025/6/914:40內(nèi)連接[例5.31]至少選修了課程號(hào)為0121和0125兩門課的學(xué)生學(xué)號(hào)。abMail:yrmeixue@942025/6/914:40內(nèi)連接[例5.31]至少選修了課程號(hào)為0121和0125兩門課的學(xué)生學(xué)號(hào)。SELECTa.SNOFROMSCaJOINSCbONa.SNO=b.SNOANDa.CNO='0121'ANDb.CNO='0125'abMail:yrmeixue@952025/6/914:40外連接在外連接中,不僅包含那些滿足連接條件的元組,而且某些表不滿足條件的元組也會(huì)出現(xiàn)在結(jié)果集中。

也就是說(shuō),外連接只限制其中一個(gè)表的元組,而不限制另外一個(gè)表的元組。外連接只能用于兩個(gè)表做連接時(shí)。Mail:yrmeixue@962025/6/914:40外連接當(dāng)對(duì)兩個(gè)表執(zhí)行外連接時(shí),可任意指定左表和右表

外連接有三種類型:①左外連接②右外連接③全外連接Mail:yrmeixue@972025/6/914:40左外連接左外連接是對(duì)連接條件左邊的表不加限制。當(dāng)左邊表元組與右邊表元組不匹配時(shí),右邊表的相應(yīng)列值取NULL。

SELECT<目標(biāo)列表達(dá)式>[,…n]FROM<表1>LEFT[OUTER]JOIN<表2>[,…n]ON<連接條件表達(dá)式>Mail:yrmeixue@982025/6/914:40左外連接[例5.32]查詢?nèi)w學(xué)生信息及他們的選課情況(含未選課程的學(xué)生信息)SELECTS.*,SC.*FROMSLEFTOUTERJOINSCONS.SNO=SC.SNOMail:yrmeixue@992025/6/914:40右外連接右外連接是對(duì)連接條件右邊的表不加限制。當(dāng)右邊表元組與左邊表元組不匹配時(shí),左邊表的相應(yīng)列值取NULL。

SELECT<目標(biāo)列表達(dá)式>[,…n]FROM<表1>RIGHT[OUTER]JOIN<表2>[,…n]ON<連接條件表達(dá)式>Mail:yrmeixue@1002025/6/914:40全外連接全外連接是對(duì)連接條件兩邊的表都不加限制。當(dāng)一邊表元組與另一邊表元組不匹配時(shí),另一邊表的相應(yīng)列值取NULL。

SELECT<目標(biāo)列表達(dá)式>[,…n]FROM<表1>FULL[OUTER]JOIN<表2>[,…n]ON<連接條件表達(dá)式>Mail:yrmeixue@1012025/6/914:40連接查詢

在SQLServer中,可以使用兩種方法實(shí)現(xiàn)連接查詢:使用FROM…WHERE子句,這是早期的SQLServer連接查詢語(yǔ)句,連接條件在WHERE子句的邏輯表達(dá)式中;ANSI連接查詢語(yǔ)句,在FROM子句中使用JOIN…ON關(guān)鍵字,連接條件在ON之后。Mail:yrmeixue@1022025/6/914:40子查詢?yōu)榱颂岣逽QL語(yǔ)句的查詢功能,通常需要將一個(gè)查詢語(yǔ)句嵌入到另外一個(gè)SQL查詢語(yǔ)句的WHERE子句或HAVING短語(yǔ)的條件中,這種查詢語(yǔ)句稱為嵌套查詢或子查詢。Mail:yrmeixue@1032025/6/914:40子查詢SelectSNameFromSWhereSNoin(SelectSNoFromSCWhereCNo=‘0211’

)外層查詢/父查詢內(nèi)層查詢/子查詢其中,外層的SELECT語(yǔ)句稱為父查詢或外查詢,嵌入內(nèi)層的SELECT語(yǔ)句稱為子查詢或內(nèi)查詢。Mail:yrmeixue@1042025/6/914:40子查詢當(dāng)一個(gè)查詢依賴于另一個(gè)查詢結(jié)果時(shí),常常使用子查詢。子查詢可以使復(fù)雜的查詢分解成多個(gè)簡(jiǎn)單查詢,從而增加SQL的查詢能力。Mail:yrmeixue@1052025/6/914:40子查詢子查詢按與父查詢是否具有依賴關(guān)系分為:無(wú)關(guān)子查詢相關(guān)子查詢表數(shù)據(jù)維護(hù)的子查詢Mail:yrmeixue@1062025/6/914:40無(wú)關(guān)子查詢它執(zhí)行的過(guò)程是:首先執(zhí)行子查詢語(yǔ)句,得到的子查詢結(jié)果集傳遞給父查詢語(yǔ)句使用。無(wú)關(guān)子查詢中對(duì)父查詢沒(méi)有任何引用。無(wú)關(guān)子查詢的執(zhí)行不依賴于父查詢。Mail:yrmeixue@1072025/6/914:40用比較運(yùn)算符的子查詢帶有比較運(yùn)算符的子查詢是指主查詢與子查詢之間用比較運(yùn)算符進(jìn)行連接。當(dāng)用戶能確切知道內(nèi)層查詢返回的是單值時(shí),可以用>、<、=、>=、<=和<>等比較運(yùn)算符。Mail:yrmeixue@1082025/6/914:40用比較運(yùn)算符的子查詢[思考]查詢與“李融”同一個(gè)系的學(xué)生信息2.Select*FromSWhereSdept=‘軟件'

1.

SelectSdeptFromSWhereSName='李融'Mail:yrmeixue@1092025/6/914:40用比較運(yùn)算符的子查詢[思考]查詢與“李融”同一個(gè)系的學(xué)生信息Select*FromSWhereSdept=(SelectSdeptFromSWhereSName='李融')Mail:yrmeixue@1102025/6/914:40用比較運(yùn)算符的子查詢[例5.33]查詢成績(jī)最高的學(xué)生學(xué)號(hào)、該成績(jī)的課程號(hào)和成績(jī)SELECTSNO,CNO,GRADEFROMSCWHEREGRADE=(SELECTMAX(GRADE)FROMSC)Mail:yrmeixue@1112025/6/914:40用比較運(yùn)算符的子查詢[練習(xí)]查詢“0211”號(hào)課程成績(jī)和學(xué)號(hào)為“20140123”的“0211”號(hào)課成績(jī)一樣

的學(xué)生學(xué)號(hào)SelectSNoFromSCWhereCno=‘0211’andGrade=()SelectGradeFromSCWhereSNo=‘20140123’andCNo=‘0211’andSno<>‘20140123’Mail:yrmeixue@1122025/6/914:40用集合運(yùn)算符的子查詢Select*FromSWhereSdept=(SelectSdeptFromSWhereSName='李融')軟件Mail:yrmeixue@1132025/6/914:40用集合運(yùn)算符的子查詢Select*FromSWhereSdept=(SelectSdeptFromSWhereSName='李融')軟件,機(jī)械用比較運(yùn)算符的子查詢,不能返回一個(gè)以上的值INMail:yrmeixue@1142025/6/914:40用集合運(yùn)算符的子查詢運(yùn)算符含義ALL如果一系列的比較都為TRUE,那么就為TRUE。ANY如果一系列的比較中任何一個(gè)為TRUE,那么就為TRUE。BETWEEN如果操作數(shù)在某個(gè)范圍之內(nèi),那么就為TRUE。EXISTS如果子查詢結(jié)果包含一些行(結(jié)果不空),那么就為TRUE。IN如果操作數(shù)等于表達(dá)式列表中的一個(gè),那么就為TRUE。NOT對(duì)任何其它布爾運(yùn)算符的值取反。SOME如果在一系列比較中,有些為TRUE,那么就為TRUE。Mail:yrmeixue@1152025/6/914:40用集合運(yùn)算符的子查詢[例5.34]查詢選修了0211號(hào)課程的學(xué)生姓名和所在學(xué)院SELECTSNAME,SDEPTFROMSWHERESNOIN(SELECTSNOFROMSC WHERECNO='0211')Mail:yrmeixue@1162025/6/914:40用集合運(yùn)算符的子查詢[例5.35]查詢沒(méi)選修任何課程的學(xué)生信息SELECT*FROMSWHERESNONOTIN(SELECTSNOFROMSC)Mail:yrmeixue@1172025/6/914:40用集合運(yùn)算符的子查詢[例5.36]查詢年齡最小的學(xué)生的姓名和出生年份SELECTSNAME,BIRTHYEARFROMSWHEREBIRTHYEAR>=ALL(SELECTBIRTHYEARFROMS)Mail:yrmeixue@1182025/6/914:40HAVING子句中的子查詢[例5.37]查詢所選課程的平均成績(jī)

高于

所有學(xué)生成績(jī)平均值的學(xué)生學(xué)號(hào)和平均成績(jī)SELECTSNO,AVG(GRADE)FROMSCGROUPBYSNOHAVINGAVG(GRADE)>(SELECTAVG(GRADE)FROMSC)Mail:yrmeixue@11

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論