【正文】
SELECT Sname FROM S WHERE NOT EXISTS (SELECT * FROM C WHERE NOT EXISTS (SELECT * FROM SC WHERE = AND =));例36:查詢所學(xué)課程包含學(xué)生S3所學(xué)課程的學(xué)生學(xué)號分析:不存在這樣的課程Y,學(xué)生S3選了Y,而其他學(xué)生沒有選。在表S中找學(xué)生,要求這個學(xué)生學(xué)了全部課程。例34:查詢與“張三”在同一個系學(xué)習(xí)的學(xué)生學(xué)號、姓名和系別。 SELECT Sname FROM S WHERE NOT EXISTS ( SELECT * FROM SC WHERE = AND Cno=‘C2’)。 Sname FROM S WHERE EXISTS ( SELECT * FROM SC WHERE = AND Cno=‘C2’)。例32:查詢選修了C2課程的學(xué)生姓名。 SELECT Sno,Sname,Sdept FROM S WHERE Sdept = (SELECT Sdept FROM S WHERE Sname=‘張三’);例31:查詢選修課程名為“數(shù)據(jù)庫”的學(xué)生學(xué)號和姓名。 C → SC → S基本思路:(1)首先在C表中找出“DB”課程的課程號Cno;(2)然后在SC表中找出Cno等于第一步給出的Cno 集合中的某個元素Cno;(3)最后在S關(guān)系中選出Sno等于第二步中Sno 集合中某個元素的元組,取出Sno 和Sname送入結(jié)果表列。 SELECT Sno,Sname,Sdept FROM S WHERE Sdept IN (SELECT Sdept FROM S WHERE Sname=‘張三’);例29:查詢選修課程名為“數(shù)據(jù)庫”的學(xué)生學(xué)號和姓名。分析:(1)確定“張三”所在的系;(2)查找所有在X系學(xué)習(xí)的學(xué)生。 SELECT Sname FROM S WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno=‘C2’)。嵌套查詢(1)帶有IN謂詞的子查詢 指父查詢與子查詢之間用IN進(jìn)行聯(lián)接,判斷某個屬性列值是否在子查詢的結(jié)果中。 SELECT Sage,COUNT(DISTINCT ) FROM S,SC WHERE = GROUP BY S; 由于要統(tǒng)計每一個年齡的學(xué)生人數(shù),因此要把滿足WHERE子句中條件的查詢結(jié)果按年齡分組,在每一組中的學(xué)生年齡相同。例25:查詢每個學(xué)生選修的課程名及其成績。 SELECT ,Sname,Sage,Ssex,Sdept,Cno,Grade FROM S, SC WHERE =; 例24:查詢選修了C2課程且成績在90分以上的所有學(xué)生。M39。例22:求基本表S中男同學(xué)的每一年齡組(超過50人)有多少人?要求查詢結(jié)果按人數(shù)升序排列,人數(shù)相同按年齡降序排列。WHERE子句作用于基本表或視圖,從中選擇滿足條件的元組。例21:查詢計算機(jī)系選修了3門以上課程的學(xué)生的學(xué)號。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 該SELECT語句對SC表按Cno的取值進(jìn)行分組,所有具有相同Cno值的元組為一組,然后對每