SQL-全称量词查询

全称量词

全称量词是指在语句中含有短语“全额”、“每一个”、“任意”、“一切”等都是在指定范围内,表示该指定范围内的全体对象或该指定范围整体的含义的词。 含有全称量词的命题叫作全称命题。全称量词的否定是存在量词。

SQL实现

SQL中没有全称量词,但可以把带有全称量词的谓词转换为等价的带有存在量词的谓词。

用EXIST/NOT EXIST实现全称量词的查询
例子:
查询选修了全部课程的学生姓名(王珊、萨师煊的《数据库系统概论》第五版书中的P110)

SELECT Sname
FROM Student            /*不存在一门课程,该学生没有选修*/
WHERE NOT EXISTS
  ( SELECT *
    FROM Course           /*对于某一学生,他没有选修的课*/
    WHERE NOT EXISTS
      ( SELECT *
        FROM SC            /*对于某一学生,某门课,该学生是否选修*/
        WHERE Sno = Student.Sno AND Cno = Course.Cno
      )
  );

例2:
查询至少选修了学生201215122选修的全部课程的学生学号。
y:表示学校任意一门选修课,
P:表示学生201215122选修了y,
q:表示要查询的学生也选修了y

问题的等价转换语义为:不存在一门课程y,学生201215122选修了,但同时要查询的学生却没有选修。
于是可以得到如下SQL语句:

SELECT DISTINCT Sno
FROM SC SCX            /*学生x*/
WHERE NOT EXISTS
  ( SELECT *            /*y选但x没选*/
    FROM SC SCY            /*学生y=学生201215122*/
    WHERE SCY.Sno = '20121522' AND NOT EXISTS
      ( SELECT *            /*x选了y选的课*/
        FROM SC SCZ
        WHERE SCZ.Sno = SCX.Sno AND SCZ.Cno = SCY.Cno
      )
  );
    
原文地址:https://www.cnblogs.com/CSE-kun/p/13952512.html