问题一
MYSQL检索选修所有课程的学生的学号
解决方案
SELECT SN FROM S WHERE NOT EXISTS
(SELECT * FROM C WHERE NOT EXISTS
(SELECT * FROM SC WHERE SC.CNO=C.CNO AND SC.SNO=S.SNO));
解释
- EXISTS 子查询找到的提交
NOT EXISTS 子查询中 找不到的提交 - 建立程序循环的概念,这是一个动态的查询过程,如 FOR循环
%伪代码
for S =1:m
for C = 1:n
if S has C, None
else, 记录 S
%S现在为没有选择全部课程的学生
return S 的补集
问题二
检索修读了学号为S4的学生所修读的所有课程的学生的姓名
解决方案
SELECT SN FROM S WHERE NOT EXISTS
(SELECT * FROM SC AS SCX WHERE SNO='S4' AND NOT EXISTS
(SELECT * FROM SC AS SCY WHERE SCY.SNO=S.SNO AND SCY.CNO=SCX.CNO));