查询选了所有课的学生姓名(自己的一点小理解)

Penguincheak 2019-05-09 02:32:21
SELECT Name FROM Student 是从Student 表中一个元组一个元组地查询符合WHERE条件的学生姓名; 最内层SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = Course.Cno 是查询学号为Sno的学生选课的情况,生成一个学号为Sno学生和其所选课程信息的结果表; 次外层 SELECT * FROM Course WHERE NOT EXISTS ( SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = Course.Cno) 从Course 表中一个元组一个元组地查询,若WHERE 返回true(最内层的查询结果为空,即没有选此门课)则将此元组(课程信息)放入结果表中,若为false(上层查询结果不为空,即选了此门课)则不放入; 最外层 SELECT Name FROM Student WHERE NOT EXISTS ( SELECT * FROM Course WHERE NOT EXISTS ( SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = Course.Cno)); 若WHERE返回true(Course结果表为空,即选了所有课)则将Student表的元组中的Sname(即当前查询的学生姓名)放入最终结果表中;所WHERE返回false(Course结果表不为空,即有没选的课)则不放入最终结果表中。 最后查询的即为选了所有课的学生的姓名。
...全文
108 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
太麻烦了,建议用join in连接,嵌套子查询那个条件连接太拖沓,后面的条件只能跟and,这样用多表查询的话,语句会看的很拖沓
AHUA1001 2019-05-09
  • 打赏
  • 举报
回复
没看懂您发这个帖子的目的是什么

57,063

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧