數據庫中SQL查詢語句習題含答案_第1頁
數據庫中SQL查詢語句習題含答案_第2頁
數據庫中SQL查詢語句習題含答案_第3頁
數據庫中SQL查詢語句習題含答案_第4頁
數據庫中SQL查詢語句習題含答案_第5頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、查詢問題:設教學數據庫 Education有三個關系:學生關系 S (SNQ SNAMEAGE SEX, SDEPT;學習關 系 SC (SNQ CNQ GRADE;課程關系 C (CNQ CNAME CDEPT TNAME(5)檢索至少選修課程號為 C2和C4的學生學號;SELECT SnoFROM SC X, SC YWHERE = AND = ' C2' AND = ' C4'SnameFROM SWHERE Sno NOT IN (SELECT Sno FROM SCWHERE Cno= 'C2');(4)檢索選修課程號為 C2或C4的學

2、生學號;SELECT SnoFROM SCWHERE Cno= 'C2' OR Cno= ' C4'(1)檢索計算機系的全體學生的學號,姓名和性別;(2)檢索學習課程號為 C2的學生學號與姓名;(3)檢索選修課程名為“ DS'的學生學號與姓名;(4)檢索選修課程號為 C2或C4的學生學號;(5)檢索至少選修課程號為 C2和C4的學生學號;(6)檢索不學C2課的學生姓名和年齡;(7)檢索學習全部課程的學生姓名;(8)查詢所學課程包含學生 S3所學課程的學生學號。(1)檢索計算機系的全體學生的學號,姓名和性別;SELECT Sno Sname Sex FRO

3、M SWHERE Sdept = ' CS ;(2)檢索學習課程號為 C2的學生學號與姓名;Sno , Sname FROM S WHERE Sno IN(SELECT Sno FROM SCWHERE Cno= ' C2'),Sname FROM S , SC WHERE =AND = 'C2'(3)檢索選修課程名為“ DS'的學生學號與姓名本查詢涉及到學號、姓名和課程名三個屬性,分別 存放在S和C表中,但S和C表沒有直接聯系,必須通 過SC表建立它們二者的聯系。C - SC - S基本思路:(1)首先在C表中找出“ D6課程的課程號 Cn。;

4、(2)然后在SC表中找出Cno等于第一步給出的 Cno集 合中的某個元素Cno;(3)最后在S關系中選出Sno等于第二步中Sno集合 中某個元素的元組,取出Sno和Sname送入結果表列。SELECT Sno SnameFROM SWHERE Sno IN(SELECT SnoFROM SCWHERE Cno IN(SELECT Cno FROM CWHERE Cname='DS);(6)檢索不學C2課的學生姓名和年齡;SnameFROM S WHERE NOT EXISTS (SELECT * FROM SCWHERE =AND Cno='C2');(7)檢索學習全部

5、課程的學生姓名;在表S中找學生,要求這個學生學了全部課程。換言之, 在S表中找學生,在 C中不存在一門課程,這個學生沒 有學。SELECT Sname FROM SWHERE NOT EXISTS (SELECT * FROM CWHERE NOT EXISTS (SELECT *FROM SCWHERE = AND=);(8)查詢所學課程包含學生 S3所學課程的學生學號。 分析:不存在這樣的課程 Y,學生S3選了 Y,而其他學 生沒有選。SELECT DISTINCT Sno FROM SC AS X WHERE NOT EXISTS (SELECT * FROM SC AS YWHERE

6、= 'S3' AND NOT EXISTS (SELECT *FROM SC AS ZWHERE = AND=);設教學數據庫Education 有三個關系:學生關系 S( SNO, SNAM,E AGE, SEX, SDEPT) ;學習關系 SC( SNO, CNO, GRAD)E;課程關系 C( CNO, CNAM,E CDEPT, TNAME)查詢問題:1:查所有年齡在20 歲以下的學生姓名及年齡。2:查考試成績有不及格的學生的學號3:查所年齡在20 至 23 歲之間的學生姓名、系別及年齡。4:查計算機系、數學系、信息系的學生姓名、性別。5:查既不是計算機系、數學系、又不

7、是信息系的學生姓名、性別6:查所有姓“劉”的學生的姓名、學號和性別。7:查姓“上官”且全名為3 個漢字的學生姓名。8:查所有不姓“張”的學生的姓名。9:查DB_Design 課程的課程號。10:查缺考的學生的學號和課程號。11:查年齡為空值的學生的學號和姓名。12:查計算機系20 歲以下的學生的學號和姓名。13:查計算機系、數學系、信息系的學生姓名、性別。14:查詢選修了C3 課程的學生的學號和成績,其結果按分數的降序排列。15: 查詢全體學生的情況, 查詢結果按所在系升序排列,對同一系中的學生按年齡降序排列。16:查詢學生總人數。17:查詢選修了課程的學生人數。18:計算選修了C1 課程的學

8、生平均成績。19:查詢學習C3課程的學生最高分數。20:查詢各個課程號與相應的選課人數。21:查詢計算機系選修了3 門以上課程的學生的學號。22:求基本表S 中男同學的每一年齡組(超過50 人)有多少人?要求查詢結果按人數升序排列,人數相同按年齡降序排列。23:查詢每個學生及其選修課程的情況。24:查詢選修了 C2課程且成績在90分以上的所有學生。25:查詢每個學生選修的課程名及其成績。26:統(tǒng)計每一年齡選修課程的學生人數。27:查詢選修了 C2課程的學生姓名。28:查詢與“張三”在同一個系學習的學生學號、姓名和系別。29:查詢選修課程名為“數據庫”的學生學號和姓名。30:查詢與“張三”在同一

9、個系學習的學生學號、姓名和系別。31 :查詢選修課程名為“數據庫”的學生學號和姓名。32:查詢選修了 C2課程的學生姓名。33 :查詢所有未選修 C2課程的學生姓名。34:查詢與“張三”在同一個系學習的學生學號、姓名和系別。35:查詢選修了全部課程的學生姓名。36:查詢所學課程包含學生S3所學課程的學生學號( 1)比較例 1:查所有年齡在20 歲以下的學生姓名及年齡。SELECT Sname , SageFROM SWHERE Sage<20; (NOT age>=20)例 2:查考試成績有不及格的學生的學號SELECT DISTINCT SnoFROM SCWHERE grade

10、<60 ;(2) 確定范圍例 3:查所年齡在20 至 23 歲之間的學生姓名、系別及年齡。SELECT Sname , Sdept , SageFROM SWHERE Sage BETWEEN 20 AND 23;( 3)確定集合例 4:查計算機系、數學系、信息系的學生姓名、性別。SELECT Sname , SsexFROM SWHERE Sdept IN ( CS , IS , MATH ) ;例 5 :查既不是計算機系、數學系、又不是信息系的學生姓名、性別SELECT Sname , SsexFROM SWHERE Sdept NOT IN ( CS , IS , MATH ) ;

11、( 4)字符匹配例 6:查所有姓“劉”的學生的姓名、學號和性別。SELECT Sname , Sno, SsexFROM SWHERE Sname LIKE 劉 % ;例 7:查姓“上官”且全名為3 個漢字的學生姓名。SELECT SnameFROM SWHERE Sname LIKE 上官 _ _ ;例 8 :查所有不姓“張”的學生的姓名。SELECT Sname , Sno, SsexFROM SWHERE Sname NOT LIKE 張 % ;例 9 :查 DB_Design 課程的課程號。SELECT CnoFROM CWHERE Cname LIKE DB_Design ESCAP

12、E ;(5) 涉及空值的查詢例 10:查缺考的學生的學號和課程號。SELECT Sno , CnoFROM SCWHERE Grade IS NULL ; (不能用 =代替) 有成績的 WHERE Grade IS NOT NULLL ; 例 11:查年齡為空值的學生的學號和姓名。SELECT Sno , SnameFROM SWHERE Sage IS NULL ;( 6)多重條件查詢例 12:查計算機系20 歲以下的學生的學號和姓名。SELECT Sno , SnameFROM SWHERE Sdept= CS AND Sage<20;例 13: 查計算機系、 數學系、 信息系的學生

13、姓名、 性別。SELECT Sname , SsexFROM SWHERE Sdept = CS OR Sdept = IS OR Sdept = MATH ) ;3、對查詢結果排序例14:查詢選修了 C3課程的學生的學號和成績,其結果按分數的降序排列。SELECT Sno , GradeFROM SCWHERE Cno= C3ORDER BY Grade DESC;例 15: 查詢全體學生的情況, 查詢結果按所在系升序排列,對同一系中的學生按年齡降序排列。SELECT *FROM SORDER BY Sdep , Sage DESC;4. 聚合函數的使用例 16:查詢學生總人數。SELECT

14、 COUNT (*)FROM S例 17:查詢選修了課程的學生人數。SELECT COUNT (DISTINCT Sno)FROM SC例 18:計算選修了C1 課程的學生平均成績。SELECT AVG ( Grade )FROM SCWHERE Cno= 例 19 :查詢學習SELECT MAXFROM SCWHERE Cno=C1 ;C3 課程的學生最高分數。( Grade ) C3 ;5、對查詢結果分組例 20 :查詢各個課程號與相應的選課人數。SELECT Cno , COUN(T Sno)FROM SCGROUP BY Cno ;該SELEC砒句對SC表按Cno的取值進行分組,所有

15、具有相同Cno值的元組為一組,然后對每一組作用聚合 函數COUNTS求得該組的學生人數。如果分組后還要求按一定的條件對這些組進行篩選,最終只輸出滿足指定條件組,則可以使用HAVING短語指定篩選條件。例 21: 查詢計算機系選修了 3 門以上課程的學生的學號。SELECT SnoFROM SCWHERE Sdept= CSGROUP BY SnoHAVING COUNT (* ) >3;WHERE?句與HAVING短語的根本區(qū)別在于作用對象不 同。WHEREF句作用于基本表或視圖,從中選擇滿足條 件的元組。HAVING短語作用于組,從中選擇滿足條件的 組。例 22 : 求基本表 S 中男

16、同學的每一年齡組 (超過 50 人) 有多少人?要求查詢結果按人數升序排列,人數相同按年齡降序排列。SELECT Sage , COUN(T Sno)FROM SWHERE Ssex='M'GROUP BY SageHAVING COUN(T* ) > 50ORDER BY 2, Sage DESC;二、多表查詢1 、聯接查詢例 23 :查詢每個學生及其選修課程的情況。SELECT ,Sname,Sage,Ssex,Sdept,Cno,GradeFROM S, SC WHERE = ;例24:查詢選修了 C2課程且成績在90分以上的所有學 生。SELECT , Sname

17、FROM S , SC WHERE =AND ='C2'AND > 90;例25:查詢每個學生選修的課程名及其成績。SELECT , Sname, Cname FROM S , SG C WHERE = AND =例26:統(tǒng)計每一年齡選修課程的學生人數。SELECT Sage , COUNT DISTINCT ) FROM S , SC WHERE = GROUP BY S ;由于要統(tǒng)計每一個年齡的學生人數,因此要把滿足 WHEREF句中條件的查詢結果按年齡分組,在每一組中 的學生年齡相同。此時的SELECT子句應對每一組分開進行操作,在每一組中,年齡只有一個值,統(tǒng)計的人

18、數 是這一組中的學生人數。1、嵌套查詢(1)帶有IN謂詞的子查詢指父查詢與子查詢之間用IN進行聯接,判斷某個屬性列值是否在子查詢的結果中。例27:查詢選修了 C2課程的學生姓名。SELECT Sname FROM S WHERE Sno IN (SELECT Sno FROM SC WHERE Cno=' C2');例28:查詢與“張三”在同一個系學習的學生學號、 姓名和系別。分析:(1)確定“張三”所在的系;(2)查找所有在 X系學習的學生。SELECT SdeptFROM SWHERE Sname='張三';SELECT Sno , Sname SdeptF

19、ROM SWHERE Sdept= 'X'把第一步查詢嵌入到第二步查詢中,用以構造第二步查詢的條件。SELECT Sno ,FROM S AS S1, S AS S2 Sname SdeptHERE =FROM SWHERE Sdept IN(SELECT Sdept FROM SWHERE Sname='張三');例29:查詢選修課程名為“數據庫”的學生學號和姓名。 本查詢涉及到學號、姓名和課程名三個屬性,分別存放在S和C表中,但S和C表沒有直接聯系,必須 通過SC表建立它們二者的聯系。C - SC一 S基本思路:(1)首先在C表中找出“ DB'課程的

20、課程號 Cno;(2)然后在SC表中找出Cno等于第一步給出的 Cno集 合中的某個元素 Cno;(3)最后在S關系中選出Sno等于第二步中Sno集合 中某個元素的元組,取出 Sno和Snam或!入結果表列。SELECT Sno , SnameFROM SWHERE Sno IN(SELECT SnoFROM SC WHERE Cno IN (SELECT Cno FROM CWHERE Cname='DB);聯接查詢方式(2)帶有比較運算符的子查詢例30:查詢與“張三”在同一個系學習的學生學號、 姓名和系別。SELECT Sno , Sname, Sdept FROM SWHERE

21、Sdept =(SELECT Sdept FROM SWHERE Sname='張三');例31:查詢選修課程名為“數據庫”的學生學號和姓名。SELECT Sno , SnameFROM SWHERE Sno IN (SELECT SnoFROM SCWHERE Cno =(SELECT CnoFROM CWHERE Cname='DB);(3)帶有EXISTS謂詞的子查詢(1)帶有EXISTS謂詞的子查詢不返回任何實際數據,AND ='張三'它只產生邏輯值。例 32:查詢選修了C2 課程的學生姓名。SnameFROM SWHERE Sno IN( SELECT SnoFROM SCWHERE Cno= C2 );SnameFROM SWHERE

溫馨提示

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

評論

0/150

提交評論