EXISTS/NOT EXISTS实现全称量词的查询(双重否定)

例1:

查询选修了全部课程的学生姓名。
\(\Longrightarrow\) 对与满足条件的学生,应该是:不存在一门课程他没有选而课表中存在。

SELECT Sname
FROM Student
WHERE NOT EXISTS(
      SELECT *
      FROM Course
      WHERE NOT EXISTS(
            SELECT *
            FROM SC
            WHERE Sno=Student.Sno 
            AND Cno=Course.Cno
      )
)

两层的嵌套查询,可以类比于两层的 'for' 循环,第一层为学生,第二层为课程,循环里面是去判断。

例2:

查询至少选修了学生201215122选修的全部课程的学生的学号。
\(\Longrightarrow\) 不存在这样的课程,学生201215122选修了,而当前学生没有。

SELECT DISTINCT Sno
FROM SC SCX
WHERE NOT EXISTS(
      SELECT *
      FROM SC SCY
      WHERE SCY.Sno='201215122' 
      AND NOT EXISTS(
            SELECT *
            FROM SC SCZ
            WHERE SCZ.Sno=SCX.Sno
            AND SCZ.Cno=SCY.Cno
      )
)

猜你喜欢

转载自www.cnblogs.com/whix/p/13178132.html