數(shù)據(jù)庫原理與應用:第9章 查詢補充_第1頁
數(shù)據(jù)庫原理與應用:第9章 查詢補充_第2頁
數(shù)據(jù)庫原理與應用:第9章 查詢補充_第3頁
數(shù)據(jù)庫原理與應用:第9章 查詢補充_第4頁
數(shù)據(jù)庫原理與應用:第9章 查詢補充_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫原理與應用

第9章查詢補充1、FROM子句例:查詢student表中1975年1月1日后出生的學生的sname和class。分別用列名姓名和班號表示。SELECTsname

姓名,class班號FROMstudentWHEREsbirthday>'1975-1-1'SELECT姓名,班號FROM(SELECT*FROMstudentWHEREsbirthday>'1975-1-1')ASX(學號,姓名,性別,出生日期,班號)2、GROUPBY子句GROUPBY分組屬性1

[,分組屬性2]…[WITHROLLUP|CUBE]例:查詢各班男生人數(shù)、女生人數(shù)。SELECTclass,ssex,COUNT(*)as'人數(shù)'FROMstudentGROUPBYclass,ssexORDERBYclass,ssex例:查詢各班男生人數(shù)、女生人數(shù)、各班總人數(shù)及學生總人數(shù)。SELECTclass,ssex,COUNT(*)as'人數(shù)'FROMstudentGROUPBYclass,ssexWITHROLLUP使用了ROLLUP后,將對GROUPBY子句中所指定的各列產生匯總行,規(guī)則是:按列的排列的逆序依次進行匯總。如本例根據(jù)班號和性別對student表分組,使用ROLLUP后,先對性別字段(即性別不同,班號相同的行)進行匯總,然后對班號和性別均不同進行匯總,所產生的匯總行中對應具有不同列值的字段值將被置為NULL。SELECTclass,ssex,COUNT(*)as'人數(shù)'FROMstudentGROUPBYclass,ssexWITHCUBE使用CUBE對GROUPBY子句中各列的所有可能組合均產生匯總行。3、COMPUTE子句COMPUTE子句與集函數(shù)功以類似,對查詢結果集中的所有記錄進行匯總統(tǒng)計。與集函數(shù)的區(qū)別是COMPUTE子句不僅要顯示匯總數(shù)據(jù),還要顯示參加匯總的記錄的詳細信息,而集合函數(shù)僅顯示匯總數(shù)據(jù)。COMPUTEBY子句與GROUPBY子句的功能類似,對查詢結果集進行分組統(tǒng)計,與GROUPBY子句的區(qū)別是COMPUTEBY子句不僅要顯示匯總數(shù)據(jù),還要分組顯示參加匯總的記錄的詳細信息,而GROUPBY僅顯示匯總數(shù)據(jù)。COMPUTE集函數(shù)[BY列名]COMPUTE子句對查詢結果集進行匯總統(tǒng)計,COMPUTEBY子句對查詢結果集進行分組統(tǒng)計。例:查詢101學生總成績,并輸出其選課的詳細記錄。selectsum(degree)fromscorewheresno='101'selectsno,cno,degreefromscorewheresno='101'selectsno,cno,degreefromscorewheresno='101'computesum(degree)列標題是系統(tǒng)自定的,COUNT函數(shù)為cnt,AVG函數(shù)為avg,SUM函數(shù)為sum,MAX函數(shù)為max,MIN函數(shù)為min。查詢每位學生的總成績,并輸出其選課的詳細記錄。selectsno,cno,degreefromscoreORDERBY

snocomputeSUM(degree)BYsno4、INTO子句通過INTO子句可以創(chuàng)建一個新表并將查詢結果中的記錄添加到該表中。SELECT…INTO不能與COMPUTE子句一起使用。例:查詢所有學生的姓名及其所選課程課程名、成績,并把查詢結果插入到新表score1中。SELECTsname,cname,degree

INTOscore1FROMstudent,score,course

WHEREstudent.sno=score.snoANDo=oSELECT*FROMscore1例:創(chuàng)建一個與student表結構完全相同的空表student1。SELECT*INTOstudent1FROMstudentWHERE1=2表達式恒為假時,形成一個和原表結構一樣的空表5、集合查詢集合操作種類并操作交操作差操作SQLServer2005中支持上述三種集合查詢并操作(UNION)交操作(INTERSECT)差操作(EXCEPT)SQLServer2000只支持并操作(UNION)不支持交操作(INTERSECT)和差操作(EXCEPT)。交操作和差操作必須轉化。Oracle數(shù)據(jù)庫中并操作(UNION)交操作(INTERSECT)差操作(MINUS)(1).并操作形式

<查詢塊> UNION <查詢塊>參加UNION操作的各結果表的列數(shù)必須相同;對應項的數(shù)據(jù)類型也必須相同最后結果集中的列名來自第一個SELECT語句在合并結果集時,默認將從最后的結果集中刪除重復的行,除非使用ALL關鍵字。并操作(續(xù))[例]查詢95031班的學生和在1975-1-1后出生的學生。方法一:

SELECT*FROMstudentWHEREclass='95031'UNION[ALL]SELECT*FROMstudentWHEREsbirthday>'1975-1-1'并操作(續(xù))方法二:

SELECTDISTINCT*FROMstudentWHEREclass='95031'ORsbirthday>'1975-1-1'并操作(續(xù))[例]查詢選修了課程3-105或者選修了課程3-245的學生。方法一:

SELECTsnoFROMscoreWHEREcno='3-105'UNIONSELECTsnoFROMscoreWHEREcno='3-245'并操作(續(xù))方法二:

SELECTDISTINCTsnoFROMscoreWHEREcno='3-105'ORcno='3-245'并操作(續(xù))[例]查詢所有師生的姓名。

SELECTsnameFROMstudentUNIONSELECTtnameFROMteacher(2).交操作SQLServer2000沒有提供集合交操作,但可用其他方法間接實現(xiàn)。[例]查詢95031班的學生與1975-1-1后出生的學生的交集本例實際上就是查詢95031班中在1975-1-1后出生的學生

SELECT*FROMstudentWHEREclass='95031'AND

sbirthday>'1975-1-1'交操作(續(xù))[例]查詢選修課程3-105的學生集合與選修課程3-245的學生集合的交集本例實際上就是查詢既選修了課程3-105又選修了課程3-245的學生

SELECTsnoFROMscoreWHEREcno='3-105'ANDsnoIN(SELECTsnoFROMscoreWHEREcno='3-245')交操作(續(xù))[例]查詢學生姓名與教師姓名的交集本例實際上是查詢與教師同名的學生姓名

SELECTDISTINCTsnameFROMstudentWHEREsnameIN (SELECTtnameFROMteacher)(3).差操作SQLServer2000中沒有提供集合差操作,但可用其他方法間接實現(xiàn)。[例]查詢95031班的學生與1975-1-1后出生的學生的差集。本例實際上就是查詢95031班中不在1975-1-1后出生的學生

SELECT*FROMstudentWHEREclass='95031'AND

sbirthday<='1975-1-1'差操作(續(xù))[例]查詢學生姓名與教師姓名的差集本例實際上是查詢學校中未與教師同名的學生姓名

SELECTDISTINCTsnameFROMstudentWHEREsnameNOTIN (SELECTtname FROMteacher)ORDERBY子句只能用于對最終查詢結果排序,不能對中間結果排序任何情況下,ORDERBY子句只能出現(xiàn)在最后注意:對集合操作結果的排序錯誤寫法

SELECT*FROMstudentWHEREclass='95031'

ORDERBYsnoUNIONSELECT*FROMstudentWHEREsbirthda

溫馨提示

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

評論

0/150

提交評論