数据库检索

问题一

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));

解释

  1. EXISTS 子查询找到的提交
    NOT EXISTS 子查询中 找不到的提交
  2. 建立程序循环的概念,这是一个动态的查询过程,如 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));

猜你喜欢

转载自www.cnblogs.com/kexve/p/11760096.html