第五章高級查詢_第1頁
第五章高級查詢_第2頁
第五章高級查詢_第3頁
第五章高級查詢_第4頁
第五章高級查詢_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)查詢之(二)第五章1目標使用LIKE、BETWEEN、IN進行模糊查詢在查詢中使用聚合函數(shù)使用GROUPBY進行分組查詢進行多表聯(lián)結查詢2模糊查詢—LIKE查詢時,字段中的內容并不一定與查詢內容完全匹配,只要字段中含有這些內容SELECTSNameAS姓名FROMStudentsWHERESNameLIKE'張%'姓名張果老張飛張揚出去思考:以下的SQL語句:SELECT*FROM數(shù)據(jù)表WHERE編號LIKE'00[^8]%[A,C]%‘可能會查詢出的編號值為()。A、9890ACDB、007_AFFC、008&DCGD、KK8C3通配符通配符解釋示例‘_’一個字符ALike'C_'%任意長度的字符串BLike'CO_%'[]括號中所指定范圍內的一個字符CLike'9W0[1-2]'[^]不在括號中所指定范圍內的一個字符DLike‘%[A-D][^1-2]'4數(shù)據(jù)庫表記錄5模糊查詢—ISNULL把某一字段中內容為空的記錄查詢出來SELECTSNameAs姓名,SAddressAS地址FROMStudentWHERESAddress

ISNULL姓名地址張果老NULL李尋歡NULL令狐沖NULL程靈素NULL……6模糊查詢—BETWEEN把某一字段中內容在特定范圍內的記錄查詢出來SELECTSno,degreeFROMSCoreWHEREdegree

BETWEEN60AND80SnoScore10164103921039210588……7模糊查詢—IN把某一字段中內容與所列出的查詢內容列表匹配的記錄查詢出來SELECTSNameAS學員姓名,SAddressAs地址FROMStudentWHERESAddress

IN

('北京','廣州','上海')學員姓名地址李揚廣州于紫電上海李青霜北京司馬弓上海……8問題成績表中存儲了所有學員的成績,我想知道:學員的總成績、平均成績怎么辦?9聚合函數(shù)-1SUMAVGSELECTSUM(degree

)FROMScoreWHEREsno='105'SELECTSUM(degree),snoFROMScoreWHEREsno='105'×SELECTAVG(degree

)AS平均成績

FromScoreWHEREdegree

>=6010聚合函數(shù)-2MAX、MINCOUNTselectavg(degree)as平均成績,max(degree)as最高分,min(degree)as最低分FromScoreWheredegree>=60SELECT

COUNT(*)

AS及格人數(shù)FromScoreWHEREdegree>=6011問題如果不是統(tǒng)計所有人所有課程的總成績而是想求每一門課的平均績或者某個人的所有課的總成績怎么辦?12分組匯總這三個數(shù)取平均值第4-6分數(shù)取平均值最后三個數(shù)取平均值有一個學員參加考試1314分組查詢—GROUPBYSELECT

cno,AVG(degree)

AS課程平均成績FROMScoreGROUPBY

cno15利用HAVING篩選結果表在實際使用中,往往還要對分組后的結果按某種條件再進行篩選,而只輸出滿足用戶指定條件的記錄。在SQL中,HAVING子句能完成此功能。“WHERE”子句與“HAVING”子句的區(qū)別在于作用對象不同:1、WHERE子句的作用對象是表,是從表中選擇出滿足篩選條件的記錄。2、HAVING子句的作用對象是組,是從組中選擇出滿足篩選條件的記錄。16【例5】查詢‘3-105’號課程的平均分。本例主要學習有關GROUPBY子句的表達式書寫格式。

selectcno,avg(degree)fromscore

groupbycnohavingcno='3-105'17分組查詢WHEREGROUPBYHAVINGWHERE子句從數(shù)據(jù)源中去掉不符合其搜索條件的數(shù)據(jù)GROUPBY子句搜集數(shù)據(jù)行到各個組中,統(tǒng)計函數(shù)為各個組計算統(tǒng)計值HAVING子句去掉不符合其組搜索條件的各組數(shù)據(jù)行18多表聯(lián)結查詢—問題學員內部測試成績查詢的每次顯示的都是學員的編號信息,因為該表中只存儲了學員的編號;實際上最好顯示學員的姓名,而姓名存儲在學員信息表;如何同時從這兩個表中取得數(shù)據(jù)?19多表聯(lián)結查詢—分類內聯(lián)結(INNERJOIN)外聯(lián)結——左外聯(lián)結(LEFTJOIN)——右外聯(lián)結(RIGHTJOIN)——完整外聯(lián)結(FULLJOIN)20SELECT S.SName,C.CNo,C.DegreeFrom ScoreASCINNERJOIN StudentASSON C.SNo=S.SNoScoreSNoCNodegree122300100100200297896776300381猜一猜:這樣寫,返回的查詢結果是一樣的嗎?SELECT S.SName,C.CNo,C.degreeFrom StudentASSINNERJOIN ScoreASCON C.SNo=S.SNo多表聯(lián)結查詢—內聯(lián)結-1StundentSName梅超風陳玄風陸乘風曲靈風SNo1234查詢結果SName梅超風陳玄風陳玄風陸乘風CNodegree00100100200297896776陸乘風0038121多表聯(lián)結查詢—內聯(lián)結-2SELECTStudent.SName,Score.CNo,Score.DegreeFROM Student,ScoreWHERE

Student.SNo=Score.SNo22多表聯(lián)結查詢—三表聯(lián)結SELECT

S.SNameAS姓名,CS.CNameAS課程,C.DegreeAS成績FROMStudentASSINNERJOINScoreASCON(S.SNo=C.SNo)INNERJOINCourseASCSON(CS.CNo=C.CNo)23ScoreSNoCNoDegree122300100100200297896776300381多表聯(lián)結查詢—左外聯(lián)結StundentsSName梅超風陳玄風陸乘風曲靈風SNo1234查詢結果SName梅超風陳玄風陳玄風陸乘風CNoDegree00100100200297896776陸乘風00381曲靈風NULLNULLSELECT

S.SName,C.Cno,C.DegreeFrom

StudentASSLEFTJOIN ScoreASCON

C.SNo=S.SNo猜一猜:這樣寫,返回的查詢結果是一樣的嗎?SELECT

S.SName,C.CNo,C.DegreeFrom

ScoreASCLEFTJOIN

StudentASSON

C.SNo=S.SNo24多表聯(lián)結查詢—右外聯(lián)結SELECT S.SName,C.CNo,C.DegreeFrom ScoreASCRIGHTOUTERJOIN StudentASSON C.SNo=S.SNo25子查詢

子查詢就是包含在另一個查詢中的查詢??梢允褂靡粋€SELECT語句返回將由另一個SELECT語句使用的記錄,此時外部查詢稱為“父查詢”,內部查詢稱為“子查詢”。子查詢包括兩種類型:嵌套查詢相關查詢26什么是子查詢2-1問題:編寫T-SQL語句,查看年齡比“李軍”大的學員,要求顯示這些學員的信息?分析:

第一步:求出“李軍”的年齡(即生日比李軍早的學員,1975-10-2<1976-2-20);第二步:利用WHERE語句,篩選年齡比“李軍”大的學員;學員信息表27什么是子查詢2-2采用子查詢實現(xiàn)SELECT*FROMstudentWHEREsbirthday<(SELECTsbirthdayFROMstudentwheresName='李軍')子查詢子查詢在WHERE語句中的一般用法:SELECT…FROM表1WHERE字段1>(子查詢)外面的查詢稱為父查詢,括號中嵌入的查詢稱為子查詢UPDATE、INSERT、DELETE一起使用,語法類似于SELECT語句

將子查詢和比較運算符聯(lián)合使用,必須保證子查詢返回的值不能多于一個2829使用子查詢2-1問題:查詢成績=60分的學員。學員信息表和成績表30使用子查詢2-2采用子查詢

SELECTsNameFROMstudentWHEREsNo=(SELECTsNoFROMscoreWHEREdegree=60)GO子查詢一般來說,表連接都可以用子查詢替換,但有的子查詢卻不能用表連接替換子查詢比較靈活、方便,常作為增刪改查的篩選條件,適合于操縱一個表的數(shù)據(jù)表連接更適合于查看多表的數(shù)據(jù)31使用IN或NOTIN的子查詢IN子查詢用于進行一個給定值是否在子查詢結果集中的判斷,格式為:表達式[NOT]IN(子查詢)當表達式與子查詢的結果表中的某個值相等時,IN謂詞返回TRUE,否則返回FALSE,若使用了NOT,則返回的值剛好相反。【例5】查詢選修了課程號為3-105的學生情況。

select*fromstudentwheresnoin(selectsnofromscorewherecno='3-105')32EXISTS子查詢4-2IFEXISTS(子查詢)語句EXISTS子查詢的語法:如果子查詢的結果非空,即記錄條數(shù)1條以上,則EXISTS(子查詢)將返回真(true),否則返回假(false)EXISTS也可以作為WHERE語句的子查詢,但一般都能用IN子查詢替換33EXISTS子查詢查找選修了3-105這門課的學生姓名

selectsnamefromstudentwhereexists(select*fromscorewher

溫馨提示

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

最新文檔

評論

0/150

提交評論