注册 登录
编程论坛 SQL Server论坛

多重exists的sql理解

eww 发布于 2007-01-25 20:58, 2075 次点击

看到这样一个SQL语句:选修了全部课程的学生:

select * from students where not exists
(
select *from courses where NOT EXISTS
(
select * from grades where sno=students.sno AND cno=courses.cno
)
)

因为它上下文也没有说具体各个名字的意思,但按常理sno应该指学号,cno指课程号 表中有些什么数据我也不清楚(别人就是这样写的)

这个SQL语句应该怎么去理解呢,谢谢大家

8 回复
#2
棉花糖ONE2007-01-25 21:02
这个表示选择了所有课程的学生,貌似以前见过
#3
eww2007-01-25 21:15

是啊,是表示“选择了所有课程的学生”,两个NOT EXISTS应该怎么结合语境分别理解呢,想得头有点大

#4
bygg2007-01-25 21:24
第二行的*后面应该有个空格.
#5
棉花糖ONE2007-01-25 21:27

因为数据库中没有直接实现所有的方法,这个查询方法主要的思想是把肯定表示为否定的否定,里面的not exists是一重否定,外面的not exists也是一重否定,里层的子查询表示没有选课的学生.不知道我说清楚了没有,你慢慢体会一下吧

#6
ninggang2007-01-25 23:17

顶,学到知识了

#7
ninggang2007-01-25 23:18
有好几天没有来论坛了,呵呵,也来灌灌水
#8
lzalibabalr2007-08-02 15:05
真强!!!!,我还不是完全明白什么回事
#9
西风独自凉2007-08-04 10:23
select * from students where not exists
(select * from courses where NOT EXISTS
(select * from grades where sno=students.sno AND cno=courses.cno))
选择所有从courses 但是要满足
select * from grades where sno=students.sno AND cno=courses.cno
这个条件,也就是这个语句查询出来必需无资料
.............
而选择所有从studnets 但要满足
(select * from courses where NOT EXISTS
(select * from grades where sno=students.sno AND cno=courses.cno))
这个条件...也就是这个语句查询出来必需无资料.....晕了
1