第章SQLServer數(shù)據(jù)查詢講解學(xué)習(xí)_第1頁(yè)
第章SQLServer數(shù)據(jù)查詢講解學(xué)習(xí)_第2頁(yè)
第章SQLServer數(shù)據(jù)查詢講解學(xué)習(xí)_第3頁(yè)
第章SQLServer數(shù)據(jù)查詢講解學(xué)習(xí)_第4頁(yè)
第章SQLServer數(shù)據(jù)查詢講解學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩110頁(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)介

SQLServer數(shù)據(jù)查詢簡(jiǎn)單的數(shù)據(jù)查詢聚合函數(shù)與分組查詢聯(lián)接查詢子查詢數(shù)據(jù)管理高級(jí)應(yīng)用數(shù)據(jù)查詢查詢的分類SELECT語(yǔ)句基本格式選擇表中的若干列選擇表中的若干行查詢的分類數(shù)據(jù)查詢單表查詢簡(jiǎn)單查詢Select…From…條件查詢where…分類查詢groupby…h(huán)aving…多表查詢多表連接查詢多表連接綜合查詢子查詢嵌套子查詢相關(guān)子查詢SELECT語(yǔ)句的基本格式SELECT的基本用法顯示常量

Select'Thisisatest!'Select'hello!'

查看全局變量Select@@languageSelect@@version

獲得函數(shù)值

SelectGetdate()SelectYear(Getdate())選擇表中的若干列檢索表中的所有列檢索表中的指定列使用計(jì)算列為結(jié)果集中的列指定別名選擇表中的若干列檢索表中的所有列USENorthwindGoSELECT*FROMemployeesGO表示所有字段(列)進(jìn)行檢索的表選擇表中的若干列檢索表中的指定列USENorthwindGoSELECTEmployeeID,LastName,FirstNameFROMemployeesGO希望顯示的字段(列)名進(jìn)行檢索的表名選擇表中的若干列employeeidlastnamefirstnametitle1DavolioNancySalesRepresentative2FullerAndrewVicePresident,Sales3LeverlingJanetSalesRepresentative4PeacockMargaretSalesRepresentative5BuchananStevenSalesManager6SuyamaMichaelSalesRepresentative7KingRobertSalesRepresentative8CallahanLauraInsideSalesCoordinator9DodsworthAnneSalesRepresentativeUSEnorthwindSELECTemployeeid,lastname,firstname,titleFROMemployeesGO示例選擇表中的若干列舉例 在Northwind數(shù)據(jù)庫(kù)中查詢以下內(nèi)容:

1、查詢表orders的全部?jī)?nèi)容;

2、在表customers中查詢客戶編號(hào)、公司名稱、地址、所在城市;

3、在表orders的訂單編號(hào)、客戶編號(hào)、員工編號(hào)、訂單日期、供貨日期;使用計(jì)算列在titles表中檢索所有書(shū)的編號(hào)、單價(jià)、打7折后的價(jià)格USEpubsGOSELECTtitle_id,price,price*0.7FROMtitles計(jì)算列使用計(jì)算列在employees表中檢索所有員工的編號(hào)、員工的姓名(firstname與lastname的組合)USENorthwindGOSELECTEmployeeID,LastName+‘.’+FirstNameFROMemployees計(jì)算列字符串連接符為結(jié)果集中的列指定別名語(yǔ)法

SELECT

表達(dá)式

[AS]

列別名

FROM

數(shù)據(jù)源USEpubsGOSELECTtitle_idas

'編號(hào)',priceas

'原價(jià)',price*0.7as

現(xiàn)價(jià)FROMtitles列別名選擇表中的若干行消除取值重復(fù)的行限制返回的行數(shù)對(duì)查詢的結(jié)果排序查詢滿足條件的行Top的使用消除取值重復(fù)的行使用DISTINCT關(guān)鍵字SELECT

stateFROMauthorsSELECT

distinct

stateFROMauthorsSELECT

state,cityFROMauthorsSELECT

distinctstate,cityFROMauthors限制返回的行數(shù)使用TOPn/TOPnpercent關(guān)鍵字SELECTtop6*FROMauthorsSELECTtop10percent*FROMauthorsSELECT

top10au_id,phone,addressFROMauthorsSELECT

top5percent

au_id,phoneFROMauthors對(duì)查詢的結(jié)果排序語(yǔ)法格式為:ORDERBY{列名

[ASC|DESC]}[,…n]]select*fromtitlesOrderbypriceselect*fromtitlesOrderbypriceascselect*fromtitlesOrderbypricedesc升序降序?qū)Σ樵兊慕Y(jié)果排序(續(xù))查詢書(shū)的信息,按書(shū)的類型和價(jià)格升序排列SELECT*FROMtitlesORDERBYtitle,pricedescGO查詢書(shū)的信息,按書(shū)名升序和價(jià)格降序排列SELECT*FROMtitlesORDERBYtype,priceGO查詢滿足條件的行employeeidlastnamefirstnametitle5BuchananStevenSalesManagerUSEnorthwindSELECTemployeeid,lastname,firstname,titleFROMemployeesWHEREemployeeid=5GO示例使用WHERE子句指定行

例:查詢5號(hào)員工的編號(hào)、姓、名、職位查詢滿足條件的行常用的查詢條件查詢條件運(yùn)算符意義比較=,>,<,>=,<=,!=,<>,!<,!>,NOT+上述比較運(yùn)算符比較大小確定范圍BETWEENAND,NOTBETWEENAND判斷值是否在范圍內(nèi)確定集合IN,NOTIN判斷值是否為列表中的值字符匹配LIKE,NOTLIKE判斷值是否與指定的字符通配格式相符空值ISNULL,ISNOTNULL判斷值是否為空多重條件AND,OR,NOT用于多重條件判斷查詢滿足條件的行使用比較運(yùn)算符使用字符串比較符使用邏輯運(yùn)算符檢索一定范圍內(nèi)的值使用值列表作為搜索條件檢索未知值使用比較運(yùn)算符操作符描述=等于>大于<小于>=大于或等于<=小于或等于<>不等于使用比較操作符來(lái)比較表中的值與指定的值或表達(dá)式的值使用比較運(yùn)算符(續(xù))lastnamecityDavolioSeattleFullerTacomaLeverlingKirklandPeacockRedmondCallahanSeattleUSEnorthwindSELECTlastname,cityFROMemployeesWHEREcountry='USA'GO示例查詢表employees中所有居住在美國(guó)的職員的姓和居住的城市。使用比較運(yùn)算符(續(xù))查詢單價(jià)小于10的書(shū)的所有信息查詢類型為’business’的書(shū)的書(shū)名和單價(jià)USEpubsGoSELECT*FROMtitlesWHEREprice<10GOSELECTtitle,priceFROMtitlesWHEREtype=‘business’GO使用字符串比較符通配符描述%0或多個(gè)字符串_任何單個(gè)的字符[]在指定區(qū)域或集合內(nèi)的任何單個(gè)字符[^]不在指定區(qū)域或集合內(nèi)的任何單個(gè)字符在比較字符串時(shí),可以使用LIKE和通配符來(lái)查找需要的行通配符的種類使用字符串比較符(續(xù))公司名字GROSELLA-RestauranteLonesomePineRestaurantTortugaRestauranteUSEnorthwindSELECTcompanynameFROMcustomersWHEREcompanynameLIKE'%Restaurant%'GO示例從表customers中,查找公司名字中含字符串“restaurant”

的行。使用字符串比較符(續(xù))selectau_lname,au_fnamefromauthorswhereau_fnamelike'D%'從表authors中,查找au_fname以字符“D”打頭的作者的姓、名。從表titles中,查找書(shū)名中包含字符串“computer”的書(shū)的所有信息。select*fromtitleswheretitlelike'%Computer%'使用字符串比較符(續(xù))selectau_lname,au_fname,phone,au_idfromauthorswhereau_idlike‘72_-%’從表authors中,查找au_id類似于”72?-?”格式的作者的編號(hào)、姓、名、電話。從表authors中,查找au_id的第2個(gè)數(shù)字是7的作者的編號(hào)、姓、名、電話。selectau_lname,au_fname,phone,au_idfromauthorswhereau_idlike'_7%'使用字符串比較符(續(xù))selectau_lname,au_fname,phone,au_idfromauthorswhereau_idlike'72[345]-%'從表authors中,查找au_id只能是”723-?”、”724-?”、”725-?”格式的作者的編號(hào)、姓、名、電話。從表authors中,查找au_id的第1個(gè)數(shù)字是5-9中的一個(gè),第2個(gè)數(shù)字是1-4中的一個(gè)的作者的編號(hào)、姓、名、電話。selectau_lname,au_fname,phone,au_idfromauthorswhereau_idlike'[5-9][1-4]%'使用字符串比較符(續(xù))從表authors中,查找au_id的第1個(gè)數(shù)字不是5-9中的一個(gè),第2個(gè)數(shù)字不是1-4中的一個(gè)的作者的編號(hào)、姓、名、電話。selectau_lname,au_fname,phone,au_idfromauthorswhereau_idlike'[^5-9][^1-4]%'使用字符串比較符(續(xù))使用LIKE時(shí),請(qǐng)注意查詢條件中的字符串內(nèi),所有的字符都有效,包括開(kāi)始和結(jié)尾的空格LIKE只可用于下列數(shù)據(jù)類型:char、nchar、varchar、nvarchar

和datetime所有通配符都只有在LIKE子句中才有意義,否則通配符會(huì)被當(dāng)作普通字符處理。select*fromauthorswhereau_fname='D%'?隨堂練習(xí)寫(xiě)出下面各種情況的搜索條件。(1)搜索以字母Mc開(kāi)頭的所有字符串。(2)搜索以字母inger結(jié)尾的所有字符串。(3)搜索在任何位置包含字母en的所有字符串。(4)搜索以字符串inger結(jié)尾、以從M到Z的任何單個(gè)字母開(kāi)頭的所有名稱。使用邏輯運(yùn)算符用邏輯操作符AND、OR和NOT來(lái)連接一系列的表達(dá)式,及優(yōu)化查詢過(guò)程。使用邏輯運(yùn)算符時(shí),遵循下列原則使用AND返回滿足所有條件的行使用OR返回滿足任一條件的行使用NOT返回不滿足條件的行搜索條件的順序先求NOT表達(dá)式的值,然后是AND,最后是OR當(dāng)表達(dá)式中所有的操作符優(yōu)先級(jí)相同時(shí),求值順序由左到右使用邏輯運(yùn)算符(續(xù))USEnorthwindSELECTproductid,productname,supplierid,unitprice

FROMproducts

GOproductidproductnamesupplieridunitprice14Tofu623.2529ThüringerRostbratwurst12123.7962Tarteausucre2949.3示例查找產(chǎn)品名以“T”開(kāi)頭,或產(chǎn)品標(biāo)識(shí)為46的產(chǎn)品,且產(chǎn)品的價(jià)格大于16美元。WHERE(productnameLIKE'T%'ORproductid=46)

AND(unitprice>16.00)

檢索一定范圍內(nèi)的值使用BETWEEN來(lái)查詢?cè)谝欢ǚ秶鷥?nèi)的值,使用BETWEEN時(shí),注意SQLServer返回的結(jié)果集中,包含范圍內(nèi)的邊緣值盡量使用BETWEEN,而不用AND和比較操作符表示的表達(dá)式(>=xAND<=y)。要使結(jié)果集不包含邊緣值,則使用(>xAND<y)要返回不在指定區(qū)域的行時(shí),使用NOTBETWEEN檢索一定范圍內(nèi)的值(續(xù))productnameunitpriceChai18Chang19AniseedSyrup10GenenShouyu15.5Pavlova17.45SirRodney’sScones10……USEnorthwindSELECTproductname,unitpriceFROMproductsWHEREunitpriceBETWEEN10AND20GO示例從products表中查詢所有產(chǎn)品的產(chǎn)品名字和單價(jià),且此產(chǎn)品的單價(jià)在10美元到20美元之間。檢索一定范圍內(nèi)的值(續(xù))selecttitle,pricefromtitleswherepricebetween15and20查詢書(shū)價(jià)在15到20元之間的圖書(shū)selecttitle,pricefromtitleswhereprice>=15andprice<=20包含邊界值selecttitle,pricefromtitleswherepricenotbetween15and20等價(jià)于:???檢索一定范圍內(nèi)的值(續(xù))使用值列表作為搜索條件使用IN語(yǔ)句指定一個(gè)值的列表作為查詢條件。使用IN時(shí),注意使用IN搜索條件和使用由OR操作符連起來(lái)的一系列比較操作符,其效果是等價(jià)的在搜索條件中不能包含NULL值,這將返回不可預(yù)測(cè)的結(jié)果集使用NOTIN搜索條件來(lái)返回值不在指定列表中的行。使用NOT會(huì)降低數(shù)據(jù)檢索速度。使用值列表作為搜索條件(續(xù))companynamecountryTokyoTradersJapanMayumi’sJapanFormaggiFortinis.r.l.ItalyPastaButtinis.r.l.ItalyUSEnorthwindSELECTcompanyname,countryFROMsuppliersWHEREcountryIN('Japan','Italy')GO示例從表suppliers中搜索位于日本和意大利的所有公司及所在地。使用值列表作為搜索條件(續(xù))select*fromauthorswherestatein('CA','KS','MI','IN')從表authors中搜索state位于‘CA’,‘KS’,‘MI’,‘IN’的所有作者的信息。select*fromauthorswherestate='CA'orstate='KS‘orstate='MI‘orstate='IN'檢索未知值輸入數(shù)據(jù)時(shí),沒(méi)有指定一個(gè)字段的值,且此字段沒(méi)有定義缺省的值,稱此字段含有空值(NULL)使用ISNULL搜索條件來(lái)查詢某指定列沒(méi)任何信息的行。需要返回含有空值的行時(shí),注意把空值和任何表達(dá)式比較都會(huì)失敗,因?yàn)榭罩挡坏扔谌魏伪磉_(dá)式使用ISNOTNULL來(lái)查詢指定列中非空的行檢索未知值(續(xù))companynamefaxExoticLiquidsNULLNewOrleansCajunDelightsNULLTokyoTradersNULLCooperativadeQuesos‘LasCabras’NULL……USEnorthwindSELECTcompanyname,faxFROMsuppliersWHEREfaxISNULLGO查詢表suppliers中字段fax含有空值的所有公司。注意:'IS'不能用等號(hào)('=')代替。

SQLServer數(shù)據(jù)查詢簡(jiǎn)單的數(shù)據(jù)查詢聚合函數(shù)與分組查詢聯(lián)接查詢子查詢數(shù)據(jù)管理高級(jí)應(yīng)用使用聚合函數(shù)聚合函數(shù)描述AVG()計(jì)算表達(dá)式中平均值COUNT()表達(dá)式中值的數(shù)目COUNT(*)所選擇的行的數(shù)目MAX()表達(dá)式中的最大值MIN()表達(dá)式中最小值SUM()計(jì)算表達(dá)式中所有值的和常見(jiàn)的聚合函數(shù)及其描述使用聚合函數(shù)對(duì)包含空值的字段使用聚合函數(shù)時(shí),應(yīng)注意SQLServer的聚合函數(shù)(COUNT(*)除外)將忽略字段中的空值COUNT(*)將計(jì)算所有的行,即使每個(gè)字段都含有空值使用聚合函數(shù)查詢titles表中類型是’popular_comp’的書(shū)的平均價(jià)格查詢publishers表中供應(yīng)商的數(shù)量查詢publishers表中供應(yīng)商所在州的數(shù)量selectavg(price)as

‘平均價(jià)格’

fromtitleswheretype='popular_comp'selectcount(*)as

‘供應(yīng)商數(shù)量’

frompublishersselectcount(state)as

‘供應(yīng)商所在州的數(shù)量’frompublishers使用聚合函數(shù)(續(xù))查詢titles表中書(shū)的類型有幾種 selectcount(type)fromtitlesselectcount(distincttype) fromtitles×√說(shuō)明:允許count()、sum()、avg()和distinct一起處理列或表達(dá)式中不同的值分組的基礎(chǔ)知識(shí)使用GROUPBY子句聯(lián)合使用GROUPBY子句和HAVING子句分組的基礎(chǔ)知識(shí)簡(jiǎn)單分組按書(shū)的種類分類,求出各類書(shū)籍的數(shù)量Selecttype,count(title)as‘?dāng)?shù)量’fromtitlesGroupbytype使用GROUPBY子句聯(lián)合使用聚合函數(shù)和GROUPBY子句,能夠把表中的記錄分組,并對(duì)組中數(shù)據(jù)進(jìn)行匯總。使用GROUPBY子句時(shí),應(yīng)注意對(duì)于指定的一組,SQLServer只生成一條記錄,不返回詳細(xì)信息不要對(duì)可包含空值的字段使用GROUPBY子句,因?yàn)榭罩狄矊⒈划?dāng)作一組使用GROUPBY子句productidorderidquantity11512102110222531153230SELECTproductid,SUM(quantity)AStotal_quantityFROMorderhist

GROUPBYproductid

GO11125102122102531321530productidtotal_quantity115235345使用GROUPBY子句productidorderidquantity11512102110222531153230USEnorthwindSELECTproductid,SUM(quantity)AStotal_quantityFROMorderhist

WHEREproductid>2GROUPBYproductid

GOproductidtotal_quantity345對(duì)滿足WHERE子句的行分組先將滿足條件的行選出productidorderidquantity31321530使用GROUPBY子句USEpubsSELECTroyalty,AVG(price*2)ASAveragePriceFROMpubs.dbo.titlesGROUPBYroyaltyGOroyaltyAveragePriceNULLNULL1032.88801230.9400……245.9800示例對(duì)包含空值的字段使用GROUPBY子句,空值也將被當(dāng)作一組使用GROUPBY子句按書(shū)的種類分類,求出3種類型書(shū)籍'business','mod_cook','trad_cook'的價(jià)格總和、平均價(jià)格以及各類書(shū)籍的數(shù)量selecttype,sum(price)astotal_price,avg(price)asavg_price,count(title)asquantityfromtitleswheretypein('business','mod_cook','trad_cook')groupbytype使用GROUPBY子句SELECT后面每一列,除了出現(xiàn)在統(tǒng)計(jì)函數(shù)中的列以外,都必須包含在在GROUPBY子句中。GROUPBY子句不支持對(duì)列分配的假名,也不支持任何使用統(tǒng)計(jì)函數(shù)的集合列。selectpub_id,type,sum(price)astotal_price,avg(price)asavg_price,count(title)asquantityfromtitleswheretypein('business','mod_cook','trad_cook')groupbytype

使用GROUPBY子句根據(jù)多列組合進(jìn)行分組統(tǒng)計(jì)計(jì)算按書(shū)的類型分類,查詢每個(gè)出版商銷售的書(shū)的平均價(jià)和總銷售額selectpub_id,type,sum(price)astotal_price,avg(price)asavg_price,count(title)asquantityfromtitlesgroupbytype,pub_id隨堂練習(xí)使用學(xué)生-課程數(shù)據(jù)庫(kù)完成下面練習(xí)。(1)計(jì)算選2號(hào)課程的學(xué)生平均成績(jī)(2)求各個(gè)課程號(hào)及相應(yīng)的選課人數(shù)(3)求每門(mén)課程的平均成績(jī)(4)求有成績(jī)的每個(gè)學(xué)生的平均成績(jī)(5)求平均成績(jī)大于86分的學(xué)生學(xué)號(hào)及平均成績(jī)聯(lián)合使用GROUPBY子句和HAVING子句在分組的同時(shí),對(duì)字段或表達(dá)式指定搜索條件使用HAVING子句時(shí),應(yīng)注意只在使用GROUPBY子句的同時(shí),使用HAVING子句來(lái)限制分組可以引用任何出現(xiàn)在選擇列表中的字段聯(lián)合使用GROUPBY子句和HAVING子句(續(xù))SELECTproductid,SUM(quantity)AStotal_quantityFROMorderhist

GROUPBYproductid

HAVINGSUM(quantity)>=30

GOproductidorderidquantity11512102110222531153230productidtotal_quantity235345SELECTproductid,orderid,quantityFROMorderhist

GO示例列出表orderhist中銷售量多于30的每種產(chǎn)品。selecttype,avg(price)fromtitlesgroupbytypehavingavg(price)>$15selecttype,avg(price)fromtitleswhereavg(price)>$15groupbytype

聚合函數(shù)不應(yīng)出現(xiàn)在where子句中聯(lián)合使用GROUPBY子句和HAVING子句(續(xù))按書(shū)的類型分類,查詢平均價(jià)大于15的書(shū)的類型、平均價(jià)聯(lián)合使用GROUPBY子句和HAVING

子句(續(xù))

(2)從titles表中,查詢得到至少出版六本書(shū)的出版商及其總銷售額。

(3)從titles表中,查詢標(biāo)識(shí)號(hào)大于0800、支付的總預(yù)付款已超過(guò)$15,000且銷售書(shū)籍的平均價(jià)格小于$20的出版商。

例題(1)從titles表中,查詢得到本年度的總銷售額(ytd_sales)超過(guò)$40,000的出版商。SQLServer數(shù)據(jù)查詢簡(jiǎn)單的數(shù)據(jù)查詢聚合函數(shù)與分組查詢聯(lián)接查詢子查詢數(shù)據(jù)管理高級(jí)應(yīng)用使用表的別名兩種方式給字段起名

使用多表聯(lián)接時(shí),必須慎重地指定字段名,任何數(shù)據(jù)庫(kù)對(duì)象名稱包含四個(gè)標(biāo)識(shí):

服務(wù)器名、數(shù)據(jù)庫(kù)名、主人名稱、對(duì)象名SELECT*FROMserver.database.schema.table

AS

table_aliasSELECT*FROMserver.database.schema.table

table_alias組合多個(gè)表中的數(shù)據(jù)聯(lián)接概述使用內(nèi)聯(lián)接使用外聯(lián)接使用交叉聯(lián)接聯(lián)接兩個(gè)以上的表自聯(lián)接(Self-Join)聯(lián)接概述從多個(gè)表中選擇指定的字段關(guān)鍵字JOIN

指定要聯(lián)接的表,以及這些表聯(lián)接的方式關(guān)鍵字

ON

指定聯(lián)接條件查詢兩個(gè)或多個(gè)表并生成單個(gè)結(jié)果集所有聯(lián)接的表必須共同擁有某些字段,這些字段必須有相同的或兼容的數(shù)據(jù)類型如果聯(lián)接的表有相同字段,則引用這些字段時(shí)必須指定表名聯(lián)接概述(續(xù))連接類型交叉連接:CrossJoin(不太用)內(nèi)連接:[Inner]Join(最常用)外連接:左外連接:Left[Outer]Join右外連接:Right[Outer]Join完全連接:Full[Outer]Join自連接:SelfJoin使用內(nèi)聯(lián)接內(nèi)聯(lián)接通過(guò)比較被聯(lián)接的表所共同擁有的字段,把多個(gè)表聯(lián)接起來(lái)語(yǔ)法

SELECT

列名列表

FROM

表名1[INNER]JOIN

表名2

ON

表名1.列名<比較運(yùn)算符>表名2.列名注意INNER可以省略。<比較運(yùn)算符>包括=、>、<、<>等。使用內(nèi)聯(lián)接(續(xù))buyer_idprod_idqty114323151553711421003buyersbuyer_nameabcdbuyer_id1234結(jié)果buyer_nameaacdbuyer_idqty11341551137d41003USEjoindbSELECTbuyer_name,sales.buyer_id,qtyFROMbuyersINNERJOINsalesONbuyers.buyer_id=sales.buyer_id

GOsales列出購(gòu)買(mǎi)產(chǎn)品的顧客信息使用內(nèi)聯(lián)接(續(xù))USEjoindbSELECTbuyer_name,sales.buyer_id,qtyFROMbuyers,salesWHEREbuyers.buyer_id=sales.buyer_id

GOUSEjoindbSELECTbuyer_name,sales.buyer_id,qtyFROMbuyersINNERJOINsalesONbuyers.buyer_id=sales.buyer_id

GO示例比較之一使用內(nèi)聯(lián)接(續(xù))USEjoindbSELECTbuyer_name,sales.buyer_id,qtyFROMbuyersINNERJOINsalesONbuyers.buyer_id=sales.buyer_id

GOUSEjoindbSELECT*FROMbuyersINNERJOINsalesONbuyers.buyer_id=sales.buyer_id

GObuyer_nameaadcbuyer_idqty11431553711d41003buyer_nameaadcdbuyer_id11434buyer_id11434prod_id23152qt量不要使用*比較之二隨堂練習(xí)(1)查詢學(xué)生“李敏勇”選修的課程的平均分(2)查詢選修“數(shù)學(xué)”課程的學(xué)生的平均分(3)查詢成績(jī)大于90分的學(xué)生的姓名(4)查詢沒(méi)有一門(mén)考試科目成績(jī)低于85分的學(xué)生的姓名(5)查詢所有學(xué)生的選課號(hào)和成績(jī)。使用外聯(lián)接左外聯(lián)接可以從兩個(gè)表中返回符合聯(lián)接條件的記錄,同時(shí)也將返回左邊表中不符合條件的記錄使用左外聯(lián)接時(shí),請(qǐng)注意不滿足聯(lián)接條件的記錄將顯示空值左聯(lián)接可以顯示左表中所有記錄可以把LEFTOUTERJOIN

簡(jiǎn)寫(xiě)為L(zhǎng)EFTJOIN使用外聯(lián)接(左聯(lián)接)USEjoindbSELECTbuyer_name,sales.buyer_id,qtyFROMbuyersLEFTOUTERJOINsales

ONbuyers.buyer_id=sales.buyer_id

GOsalesbuyer_idprod_idqty114323151553711421003buyersbuyer_nameabcdbuyer_id1234結(jié)果buyer_nameaabcbuyer_idqty11NULL3155NULL11d437d41003不滿足條件的顯示null查詢所有購(gòu)買(mǎi)者的購(gòu)買(mǎi)情況使用外聯(lián)接(右聯(lián)接)右外聯(lián)接可以從兩個(gè)表中返回符合聯(lián)接條件的記錄,同時(shí)也將返回右邊表中不符合條件的記錄使用右外聯(lián)接時(shí),請(qǐng)注意不滿足聯(lián)接條件的記錄將顯示空值右聯(lián)接可以顯示右表中所有記錄可以把RIGHTOUTERJOIN

簡(jiǎn)寫(xiě)為RIGHTJOIN使用外聯(lián)接(右聯(lián)接)USEjoindbSELECTbuyer_name,sales.buyer_id,qtyFROMbuyersRIGHTOUTERJOINsales

ONbuyers.buyer_id=sales.buyer_id

GOsalesbuyer_idprod_idqty114323151553711421003buyersbuyer_nameabcdbuyer_id1234結(jié)果buyer_nameaadcbuyer_idqty11431553711d41003示例聯(lián)接兩個(gè)以上的表聯(lián)接任意數(shù)目的表都有可能,通過(guò)使用共同擁有的字段,任何一個(gè)表都可以和其他表聯(lián)接為什么要聯(lián)接兩個(gè)以上的表 使用多重聯(lián)接可以從多個(gè)表中得到彼此相關(guān)的信息至少有一個(gè)表具有外鍵,把要聯(lián)接的表按一定關(guān)系聯(lián)系起來(lái)組合鍵中的每一字段都必須由一個(gè)相應(yīng)的ON子句引用可以使用WHERE子句限制結(jié)果集所返回的記錄聯(lián)接兩個(gè)以上的表(續(xù))SELECTbuyer_name,prod_name,qtyFROMbuyers

INNERJOINsales

ONbuyers.buyer_id=sales.buyer_id

INNERJOINproduce

ONd_id=d_id

GOproduceprod_idprod_name1234ApplesPearsOrangesBananas5Peachesbuyersbuyer_id1234buyer_nameabcdsalesbuyer_id1143prod_id231542qt果buyer_name a a c d dprod_namePearsOrangesPeachesApplesPearsqt么顧客購(gòu)買(mǎi)了什么產(chǎn)品,多少數(shù)量?隨堂練習(xí)(1)查找顧客購(gòu)買(mǎi)產(chǎn)品的數(shù)量,顯示顧客名、產(chǎn)品號(hào)、數(shù)量查找所有顧客購(gòu)買(mǎi)產(chǎn)品的數(shù)量,顯示顧客名、產(chǎn)品號(hào)、數(shù)量查找所有產(chǎn)品的購(gòu)買(mǎi)情況,顯示產(chǎn)品名、數(shù)量查找所有顧客對(duì)所有產(chǎn)品的購(gòu)買(mǎi)情況,顯示顧客名、產(chǎn)品名、數(shù)量隨堂練習(xí)(2)使用Pubs數(shù)據(jù)庫(kù)查找出版過(guò)書(shū)籍的出版商名及出版的書(shū)籍名稱查找所有出版商及其出版的書(shū)籍名查詢具有作者和出版商的書(shū)籍的名稱,及其該書(shū)的作者人數(shù)和該書(shū)的出版商。查詢所有書(shū)籍的作者人數(shù)、出版商名及書(shū)籍名稱。使用交叉聯(lián)接交叉聯(lián)接將從被聯(lián)接的表中返回所有可能的記錄組合為什么使用交叉聯(lián)接在規(guī)范化的數(shù)據(jù)庫(kù)中,很少使用交叉聯(lián)接可以為數(shù)據(jù)庫(kù)生成測(cè)試數(shù)據(jù)為清單及企業(yè)模板生成所有可能的組合數(shù)據(jù)使用交叉聯(lián)接(續(xù))USEjoindbSELECTbuyer_name,qtyFROMbuyers

CROSSJOINsales

GO結(jié)果buyer_nameaaaaqty1553711a1003b15b5b37b11b1003c15......salesbuyer_idprod_idqty114323151553711421003buyersbuyer_id1234buyer_nameabcd示例自聯(lián)接(Self-Join)使用自聯(lián)接,可以查詢一個(gè)表中各記錄之間的關(guān)系使用自聯(lián)接時(shí),應(yīng)注意引用表的兩份副本時(shí),必須使用表的別名生成自聯(lián)接時(shí),表中每一行都和自身比較一下,并生成重復(fù)的記錄,使用WHERE子句來(lái)消除這些重復(fù)記錄自聯(lián)接(Self-Join)(續(xù))USEjoindbSELECTa.buyer_idASbuyer1,d_id,b.buyer_idASbuyer2FROMsalesASa

JOIN

salesASb

ONd_id=d_idWHEREa.buyer_id>b.buyer_idGOsalesbbuyer_idprod_idqty114323151553711421003salesabuyer_idprod_idqty114323151553711421003結(jié)果buyer14prod_idbuyer221顯示擁有相同產(chǎn)品的顧客列表。隨堂練習(xí)查詢Employees表中,每一位員工的領(lǐng)導(dǎo),需要顯示員工名和領(lǐng)導(dǎo)名。ABCa1b1c1a2b2c2a3b3c3CDc1d1c2d2c4d3selectR.*,S.*fromRinnerjoinSonR.C=S.CABR.CS.CDa1b1c1c1d1a2b2c2c2d2RSselectR.*,S.*fromR,SwhereR.C=S.C內(nèi)連接內(nèi)連接與幾種外連接的對(duì)比select*fromRleftouterjoinSonR.C=S.CABR.CS.CDa1b1c1c1d1a2b2c2c2d2a3b3c3nullnullselectR.A,R.B,S.*fromRrightouterjoinSonR.C=S.CABCDa1b1c1d1a2b2c2d2nullnullc4d3左外連接右外連接ABCa1b1c1a2b2c2a3b3c3CDc1d1c2d2c4d3RSselectR.*,S.*fromRfullouterjoinSonR.C=S.CABR.CS.CDa1b1c1c1d1a2b2c2c2d2a3b3c3nullnullnullnullnullc4d3全外連接ABCa1b1c1a2b2c2a3b3c3CDc1d1c2d2c4d3RS合并多個(gè)結(jié)果集使用UNION操作符可以將多個(gè)查詢產(chǎn)生的結(jié)果集合并成一個(gè)結(jié)果集每一個(gè)查詢必須有類似的數(shù)據(jù)、相同的字段數(shù)目,并且在選擇列表中字段順序相同UNION與UNIONALL的區(qū)別UNION在進(jìn)行表聯(lián)接后會(huì)篩選掉重復(fù)的記錄,所以在表鏈接后會(huì)對(duì)所產(chǎn)生的結(jié)果集進(jìn)行排序運(yùn)算,刪除重復(fù)的記錄再返回結(jié)果。UNIONALL只是簡(jiǎn)單的將兩個(gè)結(jié)果合并后就返回。如果需要排序,則要在最后一個(gè)有UNION的子句中使用ORDERBY,以指定排序方式。合并多個(gè)結(jié)果集(續(xù))列出系號(hào)為12的所有人員(包括老師和學(xué)生)的姓名和出生日期。合并多個(gè)結(jié)果集(續(xù))SELECT學(xué)生姓名AS‘姓名’,出生日期

FROM學(xué)生信息表where系號(hào)=12UnionSELECT教師姓名,出生日期

FROM教師信息表where系號(hào)=12GO

姓名

出生日期PeterTom張三李四1967-01-011970-01-011981-01-011980-01-01結(jié)果示例合并多個(gè)結(jié)果集(續(xù))SELECT學(xué)生姓名AS‘姓名’,出生日期

FROM學(xué)生信息表where系號(hào)=12UnionallSELECT教師姓名,出生日期

FROM教師信息表where系號(hào)=12GO

姓名

出生日期張三李四PeterTom1981-01-011980-01-011967-01-011970-01-01結(jié)果示例合并多個(gè)結(jié)果集(續(xù))UNION和JOIN的區(qū)別使用操作符UNION,要求所引用的表必須具有相似的數(shù)據(jù)類型、相同的字段數(shù),每個(gè)查詢中的選擇列表必須具有相同的順序。使用操作符JOIN,只要求聯(lián)接的表共同擁有某些字段。用UNION分解復(fù)雜的查詢會(huì)提高查詢速度,而JOIN聯(lián)接表越多,查詢速度越慢。隨堂練習(xí)查詢每一種類的產(chǎn)品個(gè)數(shù)(products、categories表)查詢‘AroundtheHorn’客戶購(gòu)買(mǎi)的產(chǎn)品的名稱及購(gòu)買(mǎi)時(shí)間(orders、orderdetails、products表)查詢被客戶訂購(gòu)數(shù)量最多的前10種產(chǎn)品的名稱及訂購(gòu)數(shù)量(包括并列項(xiàng))(products、orderdetails表)SQLServer數(shù)據(jù)查詢簡(jiǎn)單的數(shù)據(jù)查詢聚合函數(shù)與分組查詢聯(lián)接查詢子查詢數(shù)據(jù)管理高級(jí)應(yīng)用子查詢子查詢介紹嵌套子查詢相關(guān)子查詢使用EXISTS操作符子查詢介紹定義一個(gè)查詢語(yǔ)句嵌套在DML語(yǔ)句中,則該語(yǔ)句被稱為子查詢。

何時(shí)使用當(dāng)查詢需要多個(gè)步驟才能完成時(shí),可以使用子查詢分類嵌套子查詢相關(guān)子查詢子查詢介紹(續(xù))子查詢的使用方法子查詢是一個(gè)SELECT語(yǔ)句,要用括號(hào)括起來(lái)。不能使用子查詢檢索數(shù)據(jù)類型為text或image的字段。子查詢可以再包含子查詢,至多可嵌套32層。嵌套子查詢嵌套子查詢執(zhí)行一次子查詢并將結(jié)果值代入外部查詢中進(jìn)行評(píng)估。內(nèi)層子查詢執(zhí)行完畢后,再執(zhí)行外層查詢。嵌套子查詢(之一)把子查詢作為派生表可以用子查詢產(chǎn)生一個(gè)派生的表,用于代替FROM子句中的表。USEnorthwind

selectT.productname

from(selectproductname,unitprice

from

products)

asT

whereT.productname=‘chai’

GO嵌套子查詢(之二)舉例:查詢產(chǎn)品名稱為’chai’的產(chǎn)品價(jià)格與所有產(chǎn)品的平均價(jià)格的差價(jià)。USEnorthwind

selectproductname,(unitprice–

(selectavg(unitprice)

from

products))as‘diff’

fromproducts

wh

溫馨提示

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