6-2-第4章-數(shù)據(jù)庫的查詢-分組_第1頁
6-2-第4章-數(shù)據(jù)庫的查詢-分組_第2頁
6-2-第4章-數(shù)據(jù)庫的查詢-分組_第3頁
6-2-第4章-數(shù)據(jù)庫的查詢-分組_第4頁
6-2-第4章-數(shù)據(jù)庫的查詢-分組_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第6章數(shù)據(jù)庫的查詢4.3.1groupby子句與分組數(shù)據(jù)having子句4.3.2orderby子句4.3.3limit子句一個完整的SQL語句的結構:所有被使用的子句必須按語法說明中顯示的順序嚴格地排序。

SELECT字段或分組函數(shù)FROM表名或視圖名[WHERE篩選條件][GROUPBY分組列][HAVING分組篩選條件][ORDERBY列][LIMIT];SELECT語句4.3.1GROUPBY子句GROUPBY子句主要用于根據(jù)字段對行分組。例如,根據(jù)學生所學的專業(yè)對XS表中的所有行分組,結果是每個專業(yè)的學生成為一組。GROUPBY子句的語法格式如下:GROUPBY{col_name|expr|position}[ASC|DESC],...[WITHROLLUP]說明:GROUPBY子句后通常包含列名或表達式。MySQL對GROUPBY子句進行了擴展,可以在列的后面指定ASC〔升序〕或DESC〔降序〕。GROUPBY可以根據(jù)一個或多個列進行分組,也可以根據(jù)表達式進行分組,經(jīng)常和聚合函數(shù)一起使用。4.3.1GROUPBY子句【例4.19】求XSCJ數(shù)據(jù)庫中各專業(yè)的學生數(shù)。

SELECT專業(yè)名,COUNT(*)AS'學生數(shù)'FROMXSGROUPBY專業(yè)名;4.3.1GROUPBY子句[練習1]求各門課程的平均成績。4.3.1GROUPBY子句[練習2]查詢每個專業(yè)的男生人數(shù)、女生人數(shù)。HAVING子句使用HAVING子句的目的與WHERE子句類似,不同的是WHERE子句是用來在FROM子句之后選擇行,而HAVING子句用來在GROUPBY子句后選擇行。例如,查找XSCJ數(shù)據(jù)庫中平均成績在85分以上的學生,就是在XS_KC表上按學號分組后篩選出符合平均成績大于等于85的學生。語法格式:HAVINGwhere_definition其中,where_definition是選擇條件,條件的定義和WHERE子句中的條件類似,不過HAVING子句中的條件可以包含聚合函數(shù),而WHERE子句中那么不可以。SQL標準要求HAVING必須引用GROUPBY子句中的列或用于聚合函數(shù)中的列。不過,MySQL支持對此工作性質的擴展,并允許HAVING引用SELECT清單中的列和外部子查詢中的列。HAVING子句【例4.20】查找XSCJ數(shù)據(jù)庫中平均成績在85分以上的學生的學號和平均成績。SELECT學號,AVG(成績)AS'平均成績'FROMXS_KCGROUPBY學號HAVINGAVG(成績)>=85;HAVING子句【練習3】查詢平均分超過80分的學生學號,其平均分及其最高分HAVING子句【練習4】查找XSCJ數(shù)據(jù)庫中平均成績在76分以上的課程和平均成績。HAVING子句【例4.21】查找選修課程超過2門且成績都在80分以上的學生的學號。分析:本查詢將XS_KC表中成績大于80的記錄按學號分組,對每組記錄計數(shù),選出記錄數(shù)大于2的各組的學號值形成結果表。SELECT學號FROMXS_KCWHERE成績>=80GROUPBY學號HAVINGCOUNT(*)>2;HAVING子句【練習5】查找選修課程超過2門且學號以3結尾的學生學號和選修課程數(shù)。4.3.2ORDERBY子句在一條SELECT語句中,如果不使用ORDERBY子句,結果中行的順序是不可預料的。使用ORDERBY子句后可以保證結果中的行按一定順序排列。語法格式:ORDERBY{col_name|expr|position}[ASC|DESC],...說明:ORDERBY子句后可以是一個列、一個表達式或一個正整數(shù)。正整數(shù)表示按結果表中該位置上的列排序。例如,使用ORDERBY3表示對SELECT的列清單上的第3列進行排序。關鍵字ASC表示升序排列,DESC表示降序排列,系統(tǒng)默認值為ASC?!纠?.22】將通信工程專業(yè)的學生按出生日期先后排序。SELECT學號,姓名,專業(yè)名,出生時間

FROMXSWHERE專業(yè)名='通信工程'

ORDERBY出生時間;ORDERBY子句【練習6】輸出學生成績,先按學生姓名排序再按成績排序。ORDERBY子句【練習7】計算學生平均成績,并按成績由大到小排序輸出4.3.5LIMIT子句LIMIT子句是SELECT語句的最后一個子句,主要用于限制被SELECT語句返回的行數(shù)。語法格式:LIMIT{[offset,]row_count|row_countOFFSEToffset}說明:語法格式中的offset和row_count都必須是非負的整數(shù)常數(shù),offset指定返回的第一行的偏移量,row_count是返回的行數(shù)。例如,“LIMIT5〞表示返回SELECT語句的結果集中最前面5行,而“LIMIT3,5〞那么表示從第4行開始返回5行。值得注意的是初始行的偏移量為0而不是1?!纠?.23】查找XS表中學號最靠前的5位學生的信息。SELECT*

FROMXSORDERBY學號LIMIT5;ORDERBY子句【練習8】查找XS表中從第4位同學開始的5位學生的信息為了與PostgreSQL兼容,MySQL也支持LIMITrow_countOFFSEToffset語法。所以將上面例子中的LIMIT子句換成“LIMIT5OFFSET3〞,結果一樣。SELECT*

FROMXSORDERBY學號LIMIT5OFFSET3;練習與作業(yè)1、將XSCJ數(shù)據(jù)庫中各專業(yè)名輸出。2、求XSCJ數(shù)據(jù)庫中的男女學生數(shù)。3、求被選修的各門課程的平均成績和選修該課程的人數(shù)。4、在XSCJ數(shù)據(jù)庫上產(chǎn)生一個結果集,包括每個專業(yè)的每個

總學分有多少人。5、查找XSCJ數(shù)據(jù)庫中平均成績在85分以上的學生的學號

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論