SQL語句中帶有EXISTS謂詞的子查詢的理解與使用

EXISTS:代表存在量詞。

在SQL中,把具有全稱量詞的謂詞查詢問題轉換成等價的存在量詞的謂詞查詢予以實現。

如有三個表,Student(Sno,Sname),Course(Cno,Cname),SC(Sno,Cno,Score)

問:查詢選修了全部課程的學生的姓名。

可看出,這是一個帶有全稱量詞的謂詞查詢(題中帶有“全部”),將其轉換爲等價的存在量詞的謂詞查詢,即:

不存在一門課程是這個學生沒有選修的。

SQL語句實現:(個人套路)

SELECT Sname                            //最終要查詢的對象
FROM Student
WHERE NOT EXISTS                        //對應第一個否定詞“不存在”
		(SELECT *                       //由EXISTS引出的子查詢,SELECT後通常都跟“*”
      FROM Course                    //“不存在”後面跟的是課程,所以在這個子查詢裏找滿足條件的課程
      WHERE NOT EXISTS               //對應第二個否定詞“沒有”
      		(SELECT *
          FROM SC                //“沒有”後面跟的是選修,所以這個子查詢裏是從選課表裏找
          WHERE SC.Sno = S.Sno     
          AND SC.Cno = C.Cno)    //分別與上兩個查詢做連接
     );
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章