SQL关于not exists的理解
学生(学号,姓名,系别,年龄)
课程(课程号,课程名,学时)
选读(学号,课程号,成绩)
问题:检索选读全部课程的学生姓名
select 学生.姓名
from 学生
where not exists( select *
from 课程
where not exists( select *
from 选读
where 学号=学生.学号 and 课程号=课程.课程号));
这个怎么理解,怎么单独运行 select *
from 选读
where 学号=学生.学号 and 课程号=课程.课程号
得不出什么结果?
------解决方案--------------------对exists 跟not exists 的理解不够啊。
select 学生.姓名
from 学生
where not exists( select *
from 课程
where not exists( select *
from 选读
where 学号=学生.学号 and 课程号=课程.课程号));
这是一整条的查询语句,不能把里面的拆出来用的。
拆出来的话,学生表、课程表,对于选课表来说就是不可见的了。
如果不是很清楚,可以查下SQL的帮助文档里面关于EXISTS与NOT EXISTS的用法。
使用 EXISTS 和 NOT EXISTS 引入的子查询可用于两种集合原理的操作:交集与差集。两个集合的交集包含同时属于两个原集合的所有元素。差集包含只属于两个集合中的第一个集合的元素。