第3章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL--37 SQL數(shù)據(jù)查詢_第1頁(yè)
第3章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL--37 SQL數(shù)據(jù)查詢_第2頁(yè)
第3章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL--37 SQL數(shù)據(jù)查詢_第3頁(yè)
第3章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL--37 SQL數(shù)據(jù)查詢_第4頁(yè)
第3章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL--37 SQL數(shù)據(jù)查詢_第5頁(yè)
已閱讀5頁(yè),還剩81頁(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)介

1、數(shù)據(jù)庫(kù)原理(yunl)及應(yīng)用第3章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言(yyn)SQL-3.7 SQL數(shù)據(jù)查詢共八十六頁(yè)本章(bn zhn)要點(diǎn)本章介紹(jisho)關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL。SQL語(yǔ)言包括數(shù)據(jù)定義語(yǔ)言(DDL,Data Definition Language)、數(shù)據(jù)操縱語(yǔ)言(DML,Data Manipulation Language)和數(shù)據(jù)控制語(yǔ)言(DCL,Data Control Language)。共八十六頁(yè)本章主要(zhyo)內(nèi)容3.1 SQL語(yǔ)言的基本概念與特點(diǎn)(tdin)3.2 SQL Server 2005基礎(chǔ)知識(shí)3.3 數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)3.4 創(chuàng)建及管理數(shù)據(jù)庫(kù) 3.5 管理數(shù)

2、據(jù)表(含數(shù)據(jù)類型)3.6 SQL數(shù)據(jù)更新3.7 SQL數(shù)據(jù)查詢 3.8 視圖3.9 SQL數(shù)據(jù)控制3.10 嵌入式SQL語(yǔ)言*習(xí)題共八十六頁(yè)3.7 SQL數(shù)據(jù)(shj)查詢數(shù)據(jù)查詢是數(shù)據(jù)庫(kù)中最常用(chn yn)的操作命令。SQL提供了Select查詢語(yǔ)句,通過(guò)查詢操作得到所需的信息。Select語(yǔ)句提供了豐富的查詢能力,可以查詢一個(gè)表或多個(gè)表。3.7.1 單表查詢3.7.2 多表查詢共八十六頁(yè)3.7.1 單表查詢(chxn)Select語(yǔ)句(yj)主要分為:1、對(duì)列的查詢選擇一個(gè)表中指定的列選擇全部列修改查詢結(jié)果中的列標(biāo)題替換查詢結(jié)果中的數(shù)據(jù)查詢經(jīng)過(guò)計(jì)算的值3、對(duì)查詢結(jié)果排序4、使用聚合函數(shù)

3、5、對(duì)查詢結(jié)果分組6、使用HAVING子句7、COMPUTE子句8、使用查詢結(jié)果來(lái)創(chuàng)建新表2、對(duì)行的查詢消除重復(fù)行限制結(jié)果集的返回行數(shù)查詢滿足條件的行邏輯運(yùn)算符比較運(yùn)算符指定范圍確定集合字符匹配空值比較共八十六頁(yè)Select語(yǔ)句基本(jbn)格式SELECT select_list INTO new_table FROM table_source WHERE search_condition GROUP BY , HAVING search_condition ORDER BY ASC|DESC , ASC|DESC 共八十六頁(yè)1、對(duì)列的相關(guān)(xinggun)查詢1)選擇(xunz)一個(gè)表中指

4、定的列基本格式為:SELECT column_name , column_nameFROM table_nameWHERE Search_condition共八十六頁(yè)例1:查詢數(shù)據(jù)表Student中所有(suyu)學(xué)生的學(xué)號(hào)及年齡; SELECT Sno,age FROM Student例2:查詢學(xué)生的學(xué)號(hào)、姓名及年齡; SELECT Sno,name,age FROM Student共八十六頁(yè)1、對(duì)列的相關(guān)(xinggun)查詢2)查詢?nèi)苛蠸ELECT * FROM Student或者SELECT Sno,name,sex,age ,dept FROM Student3)修改查詢結(jié)果(ji

5、 gu)中的列標(biāo)題SELECT column_name as new_name ,nFROM table_name共八十六頁(yè)例1:查詢數(shù)據(jù)表Student中所有學(xué)生的學(xué)號(hào)及年齡,結(jié)果中各列的標(biāo)題分別指定為學(xué)號(hào)、年齡;SELECT Sno as 學(xué)號(hào), age as 年齡 FROM Student或者 SELECT Sno 學(xué)號(hào), age 年齡 FROM Student或者 SELECT 學(xué)號(hào)=Sno, 年齡= age FROM Student注意:當(dāng)自定義的標(biāo)題中含有(hn yu)空格時(shí),必須用引號(hào)將標(biāo)題括起來(lái)。例2:查詢數(shù)據(jù)表Student中所有學(xué)生的學(xué)號(hào)及年齡,結(jié)果中各列的標(biāo)題分別指定為學(xué)

6、 號(hào)、年 齡;SELECT Sno as 學(xué) 號(hào) , age as 年 齡 FROM Student共八十六頁(yè)1、對(duì)列的相關(guān)(xinggun)查詢4)替換查詢結(jié)果中的數(shù)據(jù)(case)在對(duì)表進(jìn)行查詢時(shí),有時(shí)對(duì)所查詢的某些列希望得到的是其他概念,如當(dāng)性別(xngbi)用0、1存儲(chǔ)時(shí)希望查詢結(jié)果顯示為男、女,或者當(dāng)成績(jī)小于60時(shí)查詢結(jié)果顯示為不及格,其他為及格或優(yōu)秀。 要替換查詢結(jié)果中的數(shù)據(jù),則要用到CASE表達(dá)式。共八十六頁(yè)基本格式(g shi):CASEWHEN 條件1 THEN 表達(dá)式1WHEN 條件2 THEN 表達(dá)式2.ELSE 表達(dá)式END共八十六頁(yè)例1:查詢數(shù)據(jù)表SC的學(xué)生的學(xué)號(hào)、課程

7、(kchng)號(hào)及成績(jī),對(duì)于成績(jī)按以下規(guī)定顯示:成績(jī)?cè)?0分以下顯示為不及格;60-79之間顯示為良好;80以上顯示為優(yōu)秀。SELECT Sno,Cno,score=casewhen score=60 and score=80 then 優(yōu)秀endFROM SC共八十六頁(yè)1、對(duì)列的相關(guān)(xinggun)查詢5)查詢經(jīng)過(guò)計(jì)算的值使用select對(duì)列進(jìn)行查詢時(shí),不僅可以直接以列的原始值作為結(jié)果,也可以對(duì)列值進(jìn)行計(jì)算后所得(su d)的值作為查詢結(jié)果;計(jì)算列值可使用的算術(shù)運(yùn)算符有+ - * /和% ;要查詢經(jīng)過(guò)計(jì)算的列,在select之后的目標(biāo)列的格式為表達(dá)式:SELECT expression ,

8、 expression 共八十六頁(yè)例1:顯示(xinsh)學(xué)生的學(xué)號(hào),姓名及出生年份SELECT Sno 學(xué)號(hào), sname 姓名,出生年份=year(getdate() - ageFROM Student注: year(getdate() =2013共八十六頁(yè)2、對(duì)行的相關(guān)(xinggun)查詢1)消除結(jié)果(ji gu)集中的重復(fù)行格式為: SELECT distinct column_name , column_name注:關(guān)鍵字distinct的含義是對(duì)結(jié)果集中的重復(fù)行只選擇一個(gè),保證行的唯一性。共八十六頁(yè)2、對(duì)行的相關(guān)(xinggun)查詢2)限制結(jié)果集的返回(fnhu)行數(shù)可以用TO

9、P選項(xiàng)限制查詢結(jié)果集返回的行數(shù)?;靖袷綖椋篢OP n percent注:n是一個(gè)正整數(shù),表示返回查詢結(jié)果集的前n行。若帶percent關(guān)鍵字,則表示返回結(jié)果集的前n%行。共八十六頁(yè)例1:顯示男同學(xué)的前5條記錄(jl) SELECT top 5 * from Student where sex=男例2:顯示所有學(xué)生的前20%條記錄 SELECT top 20 percent * from Student 共八十六頁(yè)2、對(duì)行的相關(guān)(xinggun)查詢3)查詢(chxn)滿足條件的行查詢滿足條件的行可以通過(guò)WHERE子句實(shí)現(xiàn)。WHERE字句指定一系列搜索條件,只有滿足條件的行才用來(lái)構(gòu)造結(jié)果集?;?/p>

10、本格式: WHERE 共八十六頁(yè)search_condition為查詢條件,可以將多個(gè)判定運(yùn)算的結(jié)果通過(guò)邏輯運(yùn)算符再組成更復(fù)雜(fz)的查詢條件。1)邏輯運(yùn)算符(not、and、or)2)比較運(yùn)算符(、 、=)3)指定范圍(between 和 not between)4)確定集合(in 和 not in)5)字符匹配(like 和 not like)6)空值比較(is null 和 is not null)共八十六頁(yè)1)邏輯(lu j)運(yùn)算符運(yùn)算符含義實(shí)例NOT邏輯上相反的條件Where not (產(chǎn)品編號(hào)0001)AND兩個(gè)條件必須同時(shí)成立Where 產(chǎn)品編號(hào)0001 and 產(chǎn)品名稱電視O

11、R兩個(gè)條件之一成立即可Where 產(chǎn)品編號(hào)0001 or 產(chǎn)品名稱電視共八十六頁(yè)2)比較(bjio)運(yùn)算符比較運(yùn)算符用于比較兩個(gè)(lin )表達(dá)式的值,分別是、 、=、!= 、! 等。注:當(dāng)兩個(gè)表達(dá)式值均為不空(not null)時(shí),比較運(yùn)算符返回邏輯值True 或False,而當(dāng)兩個(gè)表達(dá)式值中有一個(gè)為空值(null)或都為空值時(shí),比較運(yùn)算符返回UNKNOWN。共八十六頁(yè)例1:查詢(chxn)年齡小于20歲的學(xué)生的學(xué)號(hào)、姓名及院系SELECT Sno, name,deptFROM StudentWHERE age =18 and age=22共八十六頁(yè)3)指定(zhdng)范圍用于范圍比較的關(guān)

12、鍵字有兩個(gè): between and 和 not between and,用于查找字段值在(或不在)指定(zhdng)范圍的行。其中between關(guān)鍵字之后是范圍的下限(即低值),and關(guān)鍵字之后的是范圍的上限(即高值)。between 和 not between表示閉區(qū)間,使用between 和 not between表達(dá)式進(jìn)行查詢的效果類似于使用了 來(lái)代替。共八十六頁(yè)例1:查詢(chxn)年齡在18到22之間的學(xué)生記錄SELECT * FROM StudentWHERE age between 18 and 22例2:查詢學(xué)分不在1分到3分的課程號(hào)及課程名SELECT Cno,Cname

13、FROM CourseWHERE credit not between 1 and 3共八十六頁(yè)4)確定(qudng)集合用關(guān)鍵字IN 與NOT ININ是確定給的值是否與子查詢或列表中的值相匹配。使用(shyng)IN關(guān)鍵字可以指定一個(gè)值表集合,值表中列出所有可能的值,當(dāng)表達(dá)式與值表中任一個(gè)匹配時(shí),即返回TRUE,否則返回False。共八十六頁(yè)例1:查詢(chxn)院系為CS或IS的學(xué)生的記錄SELECT * FROM StudentWHERE dept in (CS,IS)例2:查詢年齡為18、19或20的學(xué)生記錄SELECT * FROM StudentWHERE age in (18

14、,19 ,20)例3:查詢?cè)合禐镃S或IS的男學(xué)生的記錄SELECT * FROM StudentWHERE dept in (CS,IS) and sex=男共八十六頁(yè)5)字符匹配(ppi)(like模糊查詢)LIKE用于進(jìn)行字符串的匹配,其運(yùn)算對(duì)象可以是char、varchar、text、datetime等類型的數(shù)據(jù),返回(fnhu)邏輯值true或false。其含義是查找指定列值與匹配串相匹配的行。匹配串可以是一個(gè)完整的字符串,也可以含有通配符 % 和下劃線_ 。LIKE使用通配符的查詢也稱為模糊查詢,在實(shí)際系統(tǒng)開發(fā)中有廣泛的應(yīng)用。共八十六頁(yè)Like模糊(m hu)查詢使用的通配符及其含

15、義通配符含義_下劃線任何單個(gè)字符(如a_c表示以a開頭c結(jié)尾長(zhǎng)度為3的字符串)%百分號(hào)包含0個(gè)或多個(gè)字符的任意字符串(如a%c表示以a開頭c結(jié)尾任意長(zhǎng)度的字符串) 在指定范圍(如a-f 或abcdef內(nèi)的任何單個(gè)字符 不在指定范圍(如 a-f 或 abcdef內(nèi)的任何單個(gè)字符共八十六頁(yè)實(shí) 例效 果 Like 王%搜索以“王” 開頭的所有字符串。如“王三”、 “王三強(qiáng)”等Like %三搜索以“三” 結(jié)尾的所有字符串。如“王三”、 “張三”Like %三%搜索任何位置包含“三” 的所有字符串。如“王三”、 “張三” 、 “王三強(qiáng)”Like _abc搜索以“abc” 結(jié)尾的4個(gè)字母的名稱。Like

16、a-fst搜索以“st” 結(jié)尾、以af 的任意一個(gè)字母開頭的所有名稱Like m a% 搜索以“m” 開頭,并且第二個(gè)字母不是a 的所有名稱共八十六頁(yè)例1:查找(ch zho)學(xué)號(hào)以2002開頭的所有學(xué)生記錄SELECT * FROM StudentWHERE Sno like 2002%例2:查找學(xué)號(hào)中第5個(gè)字符為5的所有學(xué)生記錄SELECT * FROM StudentWHERE Sno like _ _ _ _5%例3:查找學(xué)號(hào)中第5個(gè)字符不是5的所有學(xué)生記錄SELECT * FROM StudentWHERE Sno like _ _ _ _5%共八十六頁(yè)6)空值比較(bjio)當(dāng)需要

17、判定一個(gè)表達(dá)式的值是否為空值時(shí),使用IS Null關(guān)鍵字,格式為:Expression IS not null注:查詢空值時(shí)要使用IS NULL,而 =NULL 是無(wú)效的,因?yàn)榭罩挡皇且粋€(gè)確定的值,所以(suy)不能用“=”這樣的運(yùn)算符進(jìn)行比較。 共八十六頁(yè)例1:查找目前(mqin)院系不明的所有學(xué)生記錄SELECT * FROM StudentWHERE dept is null例2:查找目前已經(jīng)確定院系的所有學(xué)生記錄SELECT * FROM StudentWHERE dept is not null共八十六頁(yè)3、對(duì)查詢(chxn)結(jié)果排序在應(yīng)用中經(jīng)常要對(duì)查詢(chxn)的結(jié)果排序輸出,例

18、如按學(xué)號(hào)對(duì)學(xué)生排序、按成績(jī)對(duì)學(xué)生排序等等。SELECT語(yǔ)句中的ORDER BY子句可用于對(duì)查詢結(jié)果按照一個(gè)或多個(gè)字段的值進(jìn)行升序(ASC)或降序(DESC)排序,默認(rèn)值為升序。其語(yǔ)法為:ORDER BY排序項(xiàng)ASC|DESC,n共八十六頁(yè)例1:查詢選修課程(kchng)號(hào)為C3的學(xué)生的成績(jī)情況,并按照分?jǐn)?shù)降序排列。Select * from SCwhere Cno = C3order by score Desc例2:查詢所有學(xué)生的成績(jī)情況,先按照課程號(hào)升序排列,再按照分?jǐn)?shù)降序排列。Select * from SCorder by Cno ,score Desc共八十六頁(yè)例3:查詢所有學(xué)生的出生

19、年份,并按照(nzho)出生年份降序排列。select Sno, name, sex, year=2013-age ,deptfrom Studentorder by year desc共八十六頁(yè)4、使用聚合(jh)函數(shù)對(duì)表數(shù)據(jù)進(jìn)行檢索時(shí),經(jīng)常需要對(duì)結(jié)果進(jìn)行計(jì)算或統(tǒng)計(jì),例如(lr)求學(xué)生的個(gè)數(shù)、學(xué)生的平均年齡等。常見的聚合函數(shù)有6個(gè),它們分別是:SUM( ): 求總和AVG( ): 求平均值MIN( ): 求最小值MAX( ): 求最大值COUNT( ): 傳回非NULL值的字段數(shù)目COUNT(*): 傳回符合查詢條件的總行數(shù) (包括null值)共八十六頁(yè)例1:查看院系為CS的學(xué)生的平均年齡

20、Select 平均年齡= avg(age) From StudentWhere dept=CS例2:顯示出來(lái)(ch li)學(xué)生的最大年齡、最小年齡和平均年齡;Select 最大年齡= max(age) , 最小年齡= min(age), 平均年齡= avg(age)From Student例3:查詢學(xué)生所屬的院系數(shù)Select count(distinct(dept) From student共八十六頁(yè)例4:查詢參加選課學(xué)生的個(gè)數(shù);Select count(distinct sno) as 選課學(xué)生個(gè)數(shù)From SC例5:查詢選修(xunxi)1號(hào)課程的學(xué)生數(shù);Select count(dis

21、tinct sno)From SCWhere Cno= 1例6:查詢所有課程的總學(xué)分; Select sum(credit) From Course共八十六頁(yè)5、對(duì)查詢(chxn)結(jié)果分組SELECT語(yǔ)句的GROUP BY 子句用于將查詢結(jié)果表按某一列或多列值進(jìn)行分組,值相等的為一組;對(duì)查詢結(jié)果分組的主要(zhyo)目的是為了細(xì)化聚合函數(shù)的作用對(duì)象。如果未對(duì)查詢結(jié)果分組,聚合函數(shù)將作用于整個(gè)查詢結(jié)果;分組后將作用于每一個(gè)組。共八十六頁(yè)語(yǔ)法格式(g shi)為:GROUP BY group_by_expression,ngroup_by_expression是用于分組的表達(dá)式,通常包含字段名。共

22、八十六頁(yè)例1:查看各個(gè)院系的學(xué)生數(shù)量 Select dept , count(Sno) as 學(xué)生數(shù) From Studentgroup by dept例2:查看各個(gè)課程(kchng)的平均成績(jī);Select Cno , avg(score) From SCgroup by Cno例3:查詢每個(gè)院系男女生個(gè)數(shù)。Select dept , sex, count(*) From Studentgroup by dept, sex共八十六頁(yè)例4:查看(chkn)各個(gè)院系學(xué)生的最大年齡、最小年齡和平均年齡;Select dept ,最大年齡= max(age) , 最小年齡= min(age), 平均

23、年齡= avg(age)From Studentgroup by dept注:使用GROUP BY 子句后, SELECT子句中的列表中只能包含在GROUP BY 中指出(zh ch)的列或在聚合函數(shù)中指定的列。共八十六頁(yè)6、使用(shyng)HAVING子句如果分組后還需要按一定(ydng)的條件對(duì)這些組進(jìn)行篩選,最終只輸出滿足指定條件的組,那么使用HAVING 子句來(lái)指定篩選條件。HAVING 子句的格式為:HAVING 例1:查看平均成績(jī)?cè)?0分以上的各個(gè)課程;Select Cno , avg(score) as 平均成績(jī)From SCgroup by Cnohaving avg(sco

24、re) =60共八十六頁(yè)例2:查找男生人數(shù)超過(guò)20的系名;Select dept From Student where sex =男g(shù)roup by depthaving count(*)=20在SELECT語(yǔ)句中,當(dāng)where、group by與having子句都被使用時(shí),要注意他們的作用和執(zhí)行順序;where用于篩選由from指定的數(shù)據(jù)對(duì)象; group by用于對(duì)where的結(jié)果進(jìn)行分組; having則是對(duì)group by以后(yhu)的分組數(shù)據(jù)進(jìn)行過(guò)濾。共八十六頁(yè)7、COMPUTE子句(z j)(選學(xué))Compute子句主要用于分類匯總,包括 Compute 和 Compute by

25、 兩種,主要用來(lái)產(chǎn)生額外的匯總行。格式為:COMPUTE 聚合函數(shù)(hnsh)名(expression),.n例1:查找計(jì)算機(jī)系學(xué)生的學(xué)號(hào)、姓名,并統(tǒng)計(jì)算機(jī)系的學(xué)生人數(shù)Select Sno,sname From Studentwhere dept=計(jì)算機(jī)compute count(Sno)共八十六頁(yè)8、使用查詢結(jié)果(ji gu)來(lái)創(chuàng)建新表SELECT select_list INTO new_table 指定使用查詢結(jié)果來(lái)創(chuàng)建新表,其中, new_table 指定新表的名稱。INTO子句的語(yǔ)法格式為: INTO 新表名稱例1:查詢Student表中學(xué)號(hào)、姓名(xngmng)及院系,并將查詢結(jié)果

26、新建一個(gè)新表test。select Sno,sname,dept into testfrom Student共八十六頁(yè)本小節(jié)主要內(nèi)容(nirng)-單表查詢1、對(duì)列的查詢選擇一個(gè)表中指定的列選擇全部列修改查詢結(jié)果中的列標(biāo)題替換(t hun)查詢結(jié)果中的數(shù)據(jù)查詢經(jīng)過(guò)計(jì)算的值3、對(duì)查詢結(jié)果排序4、使用聚合函數(shù)5、對(duì)查詢結(jié)果分組6、使用HAVING子句7、COMPUTE子句8、使用查詢結(jié)果來(lái)創(chuàng)建新表2、對(duì)行的查詢消除重復(fù)行限制結(jié)果集的返回行數(shù)查詢滿足條件的行邏輯運(yùn)算符比較運(yùn)算符指定范圍確定集合字符匹配空值比較返回本節(jié)共八十六頁(yè)3.7.2 多表查詢(chxn)1、連接查詢(chxn)語(yǔ)法結(jié)構(gòu)連接查詢分

27、類2、嵌套查詢3、集合查詢共八十六頁(yè)1、連接(linji)查詢?nèi)粢粋€(gè)查詢同時(shí)(tngsh)涉及兩個(gè)或兩個(gè)以上的表,則稱之為連接查詢。連接查詢有兩大類表現(xiàn)形式。一類是符合SQL標(biāo)準(zhǔn)連接謂詞表示形式,另一類是T-SQL擴(kuò)展的使用關(guān)鍵字JOIN的表示形式。1)等值和非等值連接2)自身連接3)外連接(以Join關(guān)鍵字指定)共八十六頁(yè)連接查詢(chxn)的一般格式:select all|distinct ,from ,where Where 子句中用來(lái)連接兩個(gè)表的條件稱為連接條件或連接謂詞連接條件的一般格式為:. .共八十六頁(yè)1)、等值、非等值及復(fù)合(fh)條件連接例1:查詢選修課程號(hào)為2的學(xué)生姓名(x

28、ngmng);SELECT snameFROM Student,scWHERE Student.Sno = sc.sno and o=2例2:查詢學(xué)號(hào)為200515001的學(xué)生的姓名、院系、課程號(hào)及成績(jī);SELECT sname,dept,cno,scoreFROM Student,SCWHERE Student.Sno=200515001 and Student.Sno = SC.Sno共八十六頁(yè)例3:查詢每個(gè)學(xué)生的學(xué)號(hào)、姓名、院系及選修課程(kchng)的課程(kchng)號(hào)、課程(kchng)名和課程(kchng)成績(jī);SELECT Student.sno, sname,dept,o,c

29、name,scoreFROM Student,course,SCWHERE Student.Sno = SC.Sno and o=o例4:查詢選修課程名為“數(shù)據(jù)庫(kù)”的學(xué)生的學(xué)號(hào)、姓名及成績(jī),并按照成績(jī)降序排序;SELECT Student.sno,sname,scoreFROM Student,course,SCWHERE Student.Sno = SC.Sno and o=o and ame=數(shù)據(jù)庫(kù)order by sc.score desc共八十六頁(yè)例5:查詢(chxn)選修2號(hào)課程且成績(jī)?cè)?0分以上的所有學(xué)生SELECT Student.Sno, SnameFROM Student,

30、SCWHERE Student.Sno = SC.Sno AND SC.Cno= 2 AND SC.score 90 例6:查詢被選修課程的課程號(hào)、課程名、學(xué)生個(gè)數(shù)及平均成績(jī)SELECT o, cname, count(sno) , avg(score)FROM course,SCWHERE o=o GROUP BY o,cname共八十六頁(yè)例7:查詢選修課學(xué)分在3分以上的的學(xué)生的學(xué)號(hào)、姓名、課程(kchng)號(hào)、課程(kchng)名、學(xué)分及成績(jī);SELECT Student.sno,sname,o,cname,credit,scoreFROM Student,course,SCWHERE S

31、tudent.Sno = SC.Sno and o=o and credit =3共八十六頁(yè)使用(shyng)表的別名該查詢?cè)诒碇谐霈F(xiàn)同名字段學(xué)號(hào)sno和課程號(hào)cno,為了區(qū)分字段,加上了表名,整個(gè)查詢命令顯得十分冗長(zhǎng)。為了簡(jiǎn)潔起見,用戶可以采用為表指定別名的方法 。例1:查詢學(xué)號(hào)為2005001的學(xué)生的姓名(xngmng)、院系、課程號(hào)及成績(jī);SELECT a.sname,a.dept, o,b.scoreFROM Student a ,SC bWHERE a.Sno=200515001 and a.Sno = b.Sno共八十六頁(yè)例2:查詢(chxn)每個(gè)學(xué)生的學(xué)號(hào)、姓名、院系及選修課程的

32、課程號(hào)、課程名和課程成績(jī); SELECT Student.sno,Student.sname,Student.dept,o,ame,SC.scoreFROM Student,course,SCWHERE Student.Sno = SC.Sno and o=oT-SQL語(yǔ)句可為:SELECT a.sno, a.sname,a.dept,o,ame,c.scoreFROM Student a,course b,SC cWHERE a.Sno = c.Sno and o=o 共八十六頁(yè)2)、自身(zshn)連接自身連接:一個(gè)表與自己進(jìn)行連接;需要給表起別名以示區(qū)別;由于所有屬性(shxng)名都是

33、同名屬性(shxng),因此必須使用別名前綴。共八十六頁(yè)例1:查詢(chxn)和“李勇”一個(gè)院系的其他學(xué)生的基本情況SELECT b.*FROM Student a,student bWHERE a.Sname=李勇 and a.dept= b.dept and b.snamea.sname共八十六頁(yè)3)、外連接(linji)在通常的連接操作中,只有滿足連接條件的行才能作為結(jié)果輸出,但有些情況下,也需要輸出其他相關(guān)選項(xiàng),這就用到了外連接。 T-SQL擴(kuò)展了以JOIN關(guān)鍵字指定連接的表達(dá)式,使表的連接運(yùn)算能力有了增強(qiáng)(關(guān)鍵字Outer可省略)。 外連接可分為(fn wi)左外連接、右外連接和全外

34、連接三種:共八十六頁(yè)3)、外連接(linji)左外連接(left outer join):結(jié)果表中除了包括滿足連接條件的行外,還包括左表所有(suyu)的行;右外連接(right outer join):結(jié)果表中除了包括滿足連接條件的行外,還包括右表所有的行;全外連接(full outer join):結(jié)果表中除了包括滿足連接條件的行外,還包括兩個(gè)表的所有行。共八十六頁(yè)例1:查詢所有學(xué)生基本情況及他們選修課程的成績(jī)(包括(boku)沒(méi)選修任何課的學(xué)生);Select student.*, sc.*From student left outer join sc-outer可省略O(shè)n studen

35、t.sno = sc.sno例2:查詢所有選修課程的學(xué)生的學(xué)號(hào)、姓名、課程號(hào)及成績(jī);Select student.sno,sname,cno,scoreFrom student right outer join scOn student.sno = sc.sno共八十六頁(yè)例3:查詢所有課程的課程號(hào)、課程名及對(duì)應(yīng)成績(jī)(chngj)(包括未選修的課程)Select o,cname,scoreFrom course full outer join scOn o = o共八十六頁(yè)2、嵌套查詢(chxn)T-SQL允許SELECT多層嵌套使用,即一個(gè)子查詢(chxn)中還可以嵌套子子查詢(chxn),用

36、來(lái)表示復(fù)雜的查詢(chxn),從而增強(qiáng)SQL的查詢能力。以這種層層嵌套的方式來(lái)構(gòu)造查詢語(yǔ)句正是SQL中“結(jié)構(gòu)化”的含義所在。共八十六頁(yè)在where子句或having子句所表示的條件中,可以使用(shyng)另一個(gè)查詢的結(jié)果(即一個(gè)查詢塊)作為條件的一部分,這種將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的where子句或having子句的條件中的查詢稱為嵌套查詢。子查詢通常與IN 、比較運(yùn)算符及EXISTS謂詞結(jié)合使用。共八十六頁(yè)1)、帶有in謂詞(wi c)的子查詢 在嵌套查詢中,子查詢的結(jié)果往往(wngwng)是一個(gè)集合,所以in是嵌套查詢中最常用的謂詞。in子查詢用于進(jìn)行一個(gè)給定值是否在子查詢結(jié)果集中

37、的判斷。語(yǔ)法格式為:expression not in (subquery)共八十六頁(yè)例1:查詢至少(zhsho)有一個(gè)成績(jī)?cè)?0分以上的學(xué)生的基本情況;SELECT *FROM StudentWHERE Sno in (SELECT distinct sno FROM sc WHERE score=80)例2:查詢沒(méi)有選修課程的學(xué)生的基本情況;SELECT *FROM StudentWHERE Sno not in (SELECT sno FROM sc)共八十六頁(yè)例3:查詢(chxn)和“李勇”一個(gè)院系的學(xué)生的基本情況SELECT a.*FROM Student a,student bWH

38、ERE a.Sname=李勇 and a.Ssept= b.Ssept或: SELECT *FROM StudentWHERE dept IN (SELECT dept FROM Student WHERE sname= 李勇)共八十六頁(yè)例4:查詢選修(xunxi)課程號(hào)為2的學(xué)生姓名;SELECT snameFROM Student,scWHERE Student.Sno = SC.Sno and o=2或:SELECT SnameFROM StudentWHERE Sno IN (SELECT Sno FROM SC WHERE Cno= 2)共八十六頁(yè)2)、帶有比較(bjio)運(yùn)算符的子

39、查詢格式為: expression = != all any(subquery)說(shuō)明:Expression為要進(jìn)行比較(bjio)的表達(dá)式Subquery是子查詢all any是對(duì)比較運(yùn)算的限制(all:所有值,any:任意一個(gè)值)共八十六頁(yè)需要配合使用比較運(yùn)算符 ANY大于子查詢結(jié)果中的某個(gè)值 ALL大于子查詢結(jié)果中的所有(suyu)值 ANY小于子查詢結(jié)果中的某個(gè)值 = ANY大于等于子查詢結(jié)果中的某個(gè)值 = ALL大于等于子查詢結(jié)果中的所有值= ANY小于等于子查詢結(jié)果中的某個(gè)值 = ALL小于等于子查詢結(jié)果中的所有值= ANY等于子查詢結(jié)果中的某個(gè)值 =ALL等于子查詢結(jié)果中的所有值(

40、通常沒(méi)實(shí)際意義)!=(或)ANY 不等于子查詢結(jié)果中的某個(gè)值!=(或)ALL不等于子查詢結(jié)果中的任何一個(gè)值共八十六頁(yè)例1:查詢其他系中比CS系某一學(xué)生年齡小的學(xué)生姓名(xngmng)和年齡;SELECT Sname,ageFROM StudentWHERE dept CS and age ANY (SELECT age FROM Student WHERE dept= CS) 或:查詢年齡高于平均年齡的學(xué)生的基本信息;SELECT Sname,ageFROM StudentWHERE dept CS and age (SELECT MAX(age) FROM Student WHERE dep

41、t= CS)共八十六頁(yè)例2:查詢和“李勇”不在一個(gè)院系的學(xué)生的基本情況;SELECT *FROM StudentWHERE dept (SELECT dept FROM Student WHERE sname= 李勇)例3:查詢年齡(ninlng)高于平均年齡(ninlng)的學(xué)生的基本信息;SELECT *FROM StudentWHERE age (SELECT avg(age) FROM student)共八十六頁(yè)3)、帶有EXISTS謂詞(wi c)的子查詢帶有EXISTS謂詞的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值“true”或邏輯假值“false”。若內(nèi)層查詢結(jié)果非空,則外層(wi

42、cn)的WHERE子句返回真值若內(nèi)層查詢結(jié)果為空,則外層的WHERE子句返回假值由EXISTS引出的子查詢,其目標(biāo)列表達(dá)式通常都用*,因?yàn)閹XISTS的子查詢只返回真值或假值,給出列名無(wú)實(shí)際意義。共八十六頁(yè)例1:查詢參加(cnji)選修的學(xué)生信息SELECT * FROM student WHERE EXISTS (SELECT * FROM sc WHERE student.sno = sc.sno)例2:查詢沒(méi)有參加選修的學(xué)生信息SELECT * FROM student WHERE NOT EXISTS (SELECT * FROM sc WHERE student.sno=sc.sn

43、o)共八十六頁(yè)例3:查詢沒(méi)有(mi yu)選修1號(hào)課程的學(xué)生姓名;SELECT SnameFROM StudentWHERE NOT EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno=1 )或:SELECT SnameFROM StudentWHERE Sno NOT IN (SELECT Sno FROM SC WHERE Cno= 1)共八十六頁(yè)3、集合(jh)查詢集合操作(cozu)的種類并操作 UNION交操作 INTERSECT差操作 EXCEPT參加集合操作的各查詢結(jié)果的列數(shù)必須相同;對(duì)應(yīng)項(xiàng)的數(shù)據(jù)類型也必須相同 共八十六頁(yè)例1:查詢CS系的學(xué)生(xu sheng)及年齡不大于19歲的學(xué)生SELECT DISTINCT *FROM StudentWHERE dept= CS OR age=19SELECT *

溫馨提示

  • 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)論