




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第1414章章 T-SQL T-SQL 高級(jí)查詢高級(jí)查詢本章內(nèi)容n使用聚合函數(shù)(Aggregate Functions )n使用group by分組n使用having篩選結(jié)果n連接多個(gè)表n使用子查詢使用聚合函數(shù)n什么是聚合函數(shù)?n聚合函數(shù)對(duì)一組值執(zhí)行計(jì)算并返回單一的值。n有哪些聚合函數(shù)?AVG返回組中值的平均值??罩祵⒈缓雎?。COUNT返回組中項(xiàng)目的數(shù)量。 COUNT (*)返回符合搜索條件的行的數(shù)目,包括含有空值的行MAX返回表達(dá)式的最大值。MIN返回表達(dá)式的最小值。 SUM返回表達(dá)式中所有值的和。使用聚合函數(shù)舉例(一)nCount語(yǔ)法:COUNT ( ALL | DISTINCT exp
2、ression | * ) n查詢titles表中書名的總數(shù)USE pubsGOSELECT COUNT(title) FROM titlesGO使用聚合函數(shù)舉例(二)nAVG語(yǔ)法:AVG ( ALL | DISTINCT expression ) n計(jì)算出 titles 表中所有商業(yè)類書籍的平均價(jià)格USE pubsGOSELECT AVG(price)FROM titlesWHERE type = business使用聚合函數(shù)注意n除 COUNT (*)函數(shù)之外,聚合函數(shù)忽略空值。n舉例: SELECT COUNT(*) FROM titlesSELECT COUNT(price) FROM
3、 titlesSelect avg(price) from titlesSelect sum(price)/count(price) from titlesSelect sum(price)/count(*) from titles課堂練習(xí)n1. 找出pubs數(shù)據(jù)庫(kù)titles表中計(jì)算機(jī)類圖書中價(jià)格最高的圖書的價(jià)格。n2. 查詢titles表中有幾類圖書。使用group by分組n什么時(shí)候使用group by子句?n當(dāng)需要按某一列數(shù)據(jù)的值進(jìn)行分類,在分類的基礎(chǔ)上對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì),就需要使用group by子句。使用group by舉例n要求:查詢pub數(shù)據(jù)庫(kù)的titles表,按書的種類分類,求出
4、每種類型的書的平均價(jià)格。USE pubsGOSELECT type,avg(price) FROM titlesGROUP BY typeGO使用group by注意:n指定 GROUP BY 時(shí),選擇列表中任一非聚合表達(dá)式內(nèi)的所有列都應(yīng)包含在 GROUP BY 列表中。n選擇列表中的列如果不在聚合函數(shù)里面,就必須在GROUP BY列表里面。否則語(yǔ)法上雖然不會(huì)出錯(cuò),但是執(zhí)行起來會(huì)出錯(cuò)。使用group by舉例(二)USE pubsGOSELECT type,pub_id, avg(price) FROM titlesgroup by typeGOERROR!使用group by舉例(三)USE
5、 pubsGOSELECT type,pub_id, avg(price) FROM titlesgroup by type,pub_idorder by 1,2GOOK!課堂練習(xí)n3. 查詢pubs數(shù)據(jù)庫(kù)authors表,要求按照州進(jìn)行分類,查找每個(gè)州有幾名作者。n4. 查詢pubs數(shù)據(jù)庫(kù)titles表,要求按照出版商id進(jìn)行分類,查找每個(gè)出版商的書到目前為止的銷售額總和(ytd_sales)使用having篩選結(jié)果n當(dāng)完成對(duì)數(shù)據(jù)結(jié)果的查詢和統(tǒng)計(jì)后,可以使用having關(guān)鍵字對(duì)查詢和計(jì)算的結(jié)果進(jìn)行進(jìn)一步的篩選。n注意having和where的區(qū)別nWHERE 子句搜索條件在進(jìn)行分組操作之前應(yīng)
6、用;n而 HAVING 搜索條件在進(jìn)行分組操作之后應(yīng)用。nHAVING 語(yǔ)法與 WHERE 語(yǔ)法類似,但 HAVING 可以包含聚合函數(shù)。nHAVING 子句可以引用選擇列表中出現(xiàn)的任意項(xiàng)。使用having舉例(一)n查詢得到本年度截止到目前的銷售額超過 $40,000 的出版商。USE pubsSELECT pub_id, total = SUM(ytd_sales)FROM titlesGROUP BY pub_idHAVING SUM(ytd_sales) 40000使用having舉例(二)n查詢價(jià)格超過10美元的書的種類,以及他們的平均價(jià)格。USE pubsGOSELECT type
7、,avg(price) 平均價(jià)格 FROM titlesWHERE price 10GROUP BY typeGO使用having舉例(三)n在前一個(gè)查詢的結(jié)果的基礎(chǔ)上,找出平均價(jià)格大于18美元的書的種類。USE pubsGOSELECT type,avg(price) 平均價(jià)格 FROM titlesWHERE price 10GROUP BY typeHAVING avg(price) 18GO課堂練習(xí)n5. 在pubs數(shù)據(jù)庫(kù)的titles表中,找出平均價(jià)格大于18美元的書的出版商id。n6. 在pubs數(shù)據(jù)庫(kù)的titles表中,找出最高價(jià)格大于20美元的書的種類 。連接多個(gè)表n連接查詢多
8、個(gè)表中的數(shù)據(jù)n使用表的別名n連接多個(gè)結(jié)果集連接查詢多個(gè)表中的數(shù)據(jù)n什么是連接n內(nèi)連接(重點(diǎn)掌握)n外連接n交叉連接什么是連接n連接通過擴(kuò)展select語(yǔ)句的from子句,可以從多個(gè)表中選擇字段。n語(yǔ)法:FROM first_table second_table ON (join_condition)連接的類型n內(nèi)連接:INNER JOIN(默認(rèn)類型)n外連接:OUTER JOINn左外連接:LEFT OUTER JOINn右外連接:RIGHT OUTER JOINn全外連接:FULL OUTER JOIN n交叉連接:CROSS JOIN內(nèi)連接n僅顯示兩個(gè)聯(lián)接表中的匹配行的聯(lián)接。n注意事項(xiàng):n
9、內(nèi)連接是SQL Server缺省的連接方式,可以把INNER JOIN簡(jiǎn)寫成JOIN;n在連接的條件中不要指定空值(NULL),因?yàn)榭罩岛推渌刀疾粫?huì)相等。內(nèi)連接舉例(一)n查找pubs數(shù)據(jù)庫(kù)中title和au_id的對(duì)應(yīng)關(guān)系。n分析:n含有title列的表:titles,titleauthor;n含有au_id列的表:titleauthor,authors。假設(shè)我們這樣寫Use pubsgoSelect title,au_idFrom titles,authorsGo想不想看看什么結(jié)果?應(yīng)該怎么考慮n在兩個(gè)表之間建立一種連接路徑title_idtitletypeau_idau_lnameau
10、_fnameau_idtitle_idau_ordTitles表authors表Titleauthor表應(yīng)該怎么寫方法一:Select titles.title,titleauthor.au_idFrom titles,titleauthorWhere titles.title_id = titleauthor.title_id方法二:Select titles.title,titleauthor.au_idFrom titles INNER JOIN titleauthorON titles.title_id=titleauthor.title_id內(nèi)連接連接舉例(二)n可以聯(lián)接 title
11、s 表和 publishers 表以創(chuàng)建顯示每個(gè)書名的出版商名稱的結(jié)果集。n注意:在內(nèi)聯(lián)接中,結(jié)果集內(nèi)不包含沒有出版商信息的書名,也不包含沒有書名的出版商。SELECT title, pub_nameFROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id使用表的別名n為什么使用表的別名?n增加語(yǔ)句的可讀性;n有利于編寫復(fù)雜的表連接操作語(yǔ)句;n語(yǔ)法:ntable_name AS table_aliasntable_name table_alias 使用表的別名舉例Select titles.title_id,
12、publishers.pub_nameFrom titles JOIN publishersON titles.pub_id=publishers.pub_idSelect t.title_id, p.pub_nameFrom titles t JOIN publishers pON t.pub_id=p.pub_idSelect t.title_id, p.pub_nameFrom titles AS t JOIN publishers AS pON t.pub_id=p.pub_id課堂練習(xí)n7. 找出title_id和pub_name的對(duì)應(yīng)關(guān)系。(查詢每一本書編號(hào)對(duì)應(yīng)的出版商)n8. 找
13、出title和pub_name的對(duì)應(yīng)關(guān)系。n9. 查詢每個(gè)作者的編號(hào),姓名,所出的書的編號(hào),并對(duì)結(jié)果排序。(注意使用表的別名注意使用表的別名 )外連接n為什么使用外連接n僅當(dāng)至少有一個(gè)同屬于兩表的行符合聯(lián)接條件時(shí),內(nèi)聯(lián)接才返回行。n內(nèi)聯(lián)接消除與另一個(gè)表中的任何行不匹配的行。n外聯(lián)接會(huì)返回 FROM 子句中提到的至少一個(gè)表或視圖的所有行,只要這些行符合任何 WHERE 或 HAVING 搜索條件。外連接舉例(一)n假設(shè)在 city 列上聯(lián)接 authors 表和 publishers 表。結(jié)果只顯示在出版商所在城市居住的作者。USE pubsSELECT a.au_fname, a.au_lna
14、me, p.pub_nameFROM authors a INNER JOIN publishers pON a.city = p.city外連接舉例(二)n但是如果使用左外連接USE pubsSELECT a.au_fname, a.au_lname, p.pub_nameFROM authors a LEFT OUTER JOIN publishers p ON a.city = p.cityORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC交叉連接(cross join)n交叉聯(lián)接返回左表中的所有行,左表中的每一行與右表中的所有
15、行組合。n交叉聯(lián)接也稱作笛卡爾積。n如果表A有N條記錄,表B有M條記錄,那么交叉連接產(chǎn)生的結(jié)果集將會(huì)有N*M條記錄。連接多個(gè)結(jié)果集n使用UNION運(yùn)算符,把多個(gè)select語(yǔ)句返回的結(jié)果集合并到一個(gè)結(jié)果集中。n每一個(gè)查詢必須:n類似的數(shù)據(jù)類型(兼容的數(shù)據(jù)類型)n相同的列數(shù)n選擇列表中的列具有相同的順序連接多個(gè)結(jié)果集舉例(一)use pubsgoselect pub_id,pub_name from publishersunionselect title_id,title from titleswhere price 20連接多個(gè)結(jié)果集并排序n如果要對(duì)UNION操作的結(jié)果集進(jìn)行排序,必須把ord
16、er by子句寫在最后的select子句后面。n選擇排序的列必須是第一個(gè)select子句的列。n觀察多個(gè)結(jié)果集合并后的結(jié)果集的列標(biāo)題。連接多個(gè)結(jié)果集舉例(二)use pubsgoselect pub_id,pub_name from publishersunionselect title_id,title from titleswhere price 20order by pub_name保留合并后結(jié)果集重復(fù)的行nUNION子句會(huì)自動(dòng)刪除結(jié)果集中重復(fù)的行。n使用ALL關(guān)鍵字保留所有的行。連接多個(gè)結(jié)果集舉例(二)Use pubsgoSelect state from authorsUNION A
17、LLSelect state from publishersOrder by statego課堂練習(xí)n10. 從authors表中選擇state,city列,從publisher表中選擇state,city列,并把兩個(gè)查詢的結(jié)果合并為一個(gè)結(jié)果集,并對(duì)結(jié)果集按city列、state列進(jìn)行排序。n11. 對(duì)上面的查詢語(yǔ)句作修改,保留所有重復(fù)的記錄。使用子查詢(嵌套查詢)n子查詢介紹(subquery)n把子查詢用作派生的表n把子查詢用作表達(dá)式n使用IN的子查詢n用子查詢關(guān)聯(lián)數(shù)據(jù)n使用EXISTS和NOT EXISTS的子查詢子查詢介紹n什么是子查詢?n子查詢是一個(gè) SELECT 查詢,它返回單個(gè)值
18、且嵌套在 SELECT、INSERT、UPDATE、DELETE 語(yǔ)句或其它子查詢中。n為什么使用子查詢?n把一個(gè)復(fù)雜的查詢分解成一系列的邏輯步驟;n當(dāng)一個(gè)查詢依賴于另一個(gè)查詢時(shí),子查詢會(huì)很有用。把子查詢用作派生的表n子查詢產(chǎn)生一個(gè)結(jié)果集,我們可以把它看成一個(gè)表(派生表),用來代替FROM子句中的表。把子查詢用作派生的表舉例USE northwindSELECT T.orderid, T.customerid FROM ( SELECT orderid, customerid FROM orders ) AS TGO把子查詢用作表達(dá)式n任何允許使用表達(dá)式的地方都可以使用子查詢。USE pubs
19、SELECT title, price ,( SELECT AVG(price) FROM titles) AS average ,price-(SELECT AVG(price) FROM titles) AS differenceFROM titlesWHERE type=popular_compGO使用子查詢的格式匯總n包括子查詢的語(yǔ)句通常采用以下格式中的一種: nWHERE expression NOT IN (subquery)nWHERE expression comparison_operator (subquery)nWHERE NOT EXISTS (subquery) 使用
20、IN的子查詢n通過 IN(或 NOT IN)引入的子查詢結(jié)果是一列零值或更多值。n子查詢返回結(jié)果之后,外部查詢將利用這些結(jié)果。使用IN的子查詢舉例n查找所有曾出版過商業(yè)書籍的出版商的名稱。USE pubsSELECT pub_nameFROM publishersWHERE pub_id IN (SELECT pub_id FROM titles WHERE type = business)使用IN的子查詢分析n首先,內(nèi)部查詢返回出版過商業(yè)書籍的出版商的標(biāo)識(shí)號(hào)(1389 和 0736)。SELECT pub_id FROM titlesWHERE type = businessn然后,這些值被
21、代入外部查詢中,在 publishers 中查找與上述標(biāo)識(shí)號(hào)相配的名字。SELECT pub_name FROM publishersWHERE pub_id in (1389, 0736)子查詢(subquery)與連接(join)n許多包含子查詢的 T-SQL 語(yǔ)句都可以改為用聯(lián)接表示。n而其它一些問題只能由子查詢提出。n在 Transact-SQL 中,包括子查詢的語(yǔ)句和不包括子查詢但語(yǔ)義上等效的語(yǔ)句在性能方面通常沒有區(qū)別。n但是,在一些必須檢查存在性的情況中,使用聯(lián)接會(huì)產(chǎn)生更好的性能。使用連接代替子查詢n查找所有曾出版過商業(yè)書籍的出版商的名稱。(使用連接)select pub_name
22、 from publishers join titleson publishers.pub_id = titles.pub_idwhere titles.type=business只能使用聯(lián)接的情況n使用聯(lián)接而不使用子查詢處理該問題及類似問題的一個(gè)不同之處在于,聯(lián)接使您可以在結(jié)果中顯示多個(gè)表中的列。只能使用聯(lián)接的情況舉例n查找所有曾出版過商業(yè)書籍的出版商的名稱和書籍的書名。USE pubsSELECT pub_name, titleFROM publishers INNER JOIN titles ON publishers.pub_id = titles.pub_id AND type =
23、business課堂練習(xí)n12. 顯示所有來自CA州的作家的全部作品和作家代號(hào)。(使用IN,和連接兩種方法)用子查詢關(guān)聯(lián)數(shù)據(jù)n許多查詢都可以通過執(zhí)行一次子查詢并將結(jié)果值代入外部查詢的 WHERE 子句進(jìn)行評(píng)估。n在包括相關(guān)子查詢的查詢中,子查詢依靠外部查詢獲得值。n這意味著子查詢是重復(fù)執(zhí)行的,為外部查詢可能選擇的每一行均執(zhí)行一次。用子查詢關(guān)聯(lián)數(shù)據(jù)舉例(一)n查找獲得某本書 100 % 共享版稅 (royaltyper) 的所有作者名。USE pubsSELECT au_lname, au_fnameFROM authorsWHERE 100 IN (SELECT royaltyper FROM titleauthor WHERE titleauthor.au_ID = authors.au_id)用子查詢關(guān)聯(lián)數(shù)據(jù)舉例(二)n查詢定購(gòu)了23號(hào)產(chǎn)品50件以上的客戶。USE northwindSELECT orderid, customeridFROM orders AS or1WHERE 50 (SELECT quantity FROM order details AS od WHERE or1.orderid = od.orderid AND ductid = 23)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 組織領(lǐng)導(dǎo)力的多維度研究計(jì)劃
- 如何有效管理生活部的日常事務(wù)計(jì)劃
- 準(zhǔn)確預(yù)測(cè)倉(cāng)庫(kù)需求的方法計(jì)劃
- 保安工作總結(jié)計(jì)劃金融行業(yè)保安工作的技術(shù)改進(jìn)
- 社區(qū)個(gè)人工作計(jì)劃改善社區(qū)停車設(shè)施
- 《貴州新恒基礦業(yè)有限公司興仁市太平洞金礦(新建)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評(píng)審意見
- 《貴州畢節(jié)百礦大能煤業(yè)有限責(zé)任公司水城縣玉舍鄉(xiāng)中寨煤礦(變更)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評(píng)審意見
- 腦梗死靜脈溶栓護(hù)理后護(hù)理
- 統(tǒng)編版小學(xué)語(yǔ)文二年級(jí)下冊(cè)第9課《楓樹上的喜鵲》精美課件
- 2025年長(zhǎng)春貨運(yùn)員初級(jí)考試題庫(kù)
- 《奢香夫人》歌詞(男女聲歌詞標(biāo)注)
- 2025年廣東韶關(guān)城投集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2025口腔科年度工作計(jì)劃
- iso28000-2022供應(yīng)鏈安全管理手冊(cè)程序文件表單一整套
- 養(yǎng)老院敬老院福利醫(yī)養(yǎng)機(jī)構(gòu)消防知識(shí)培訓(xùn)科普講座教學(xué)課件
- 商業(yè)辦公樓網(wǎng)絡(luò)改造施工方案
- 子癇診斷及治療
- 2025屆海南省??谑忻8呖加⒄Z(yǔ)二模試卷含解析
- 《中醫(yī)美容》課件
- 2023年高考真題-歷史(遼寧卷) 含解析
- 2024年中國(guó)主題公園競(jìng)爭(zhēng)力評(píng)價(jià)報(bào)告-中國(guó)主題公園研究院
評(píng)論
0/150
提交評(píng)論