今年上半年的高程考试考了含嵌套的 NO EXISTS 的SQL查询,
国防科大出版的《数据库原理》中也有这种例子,我感到很
难理解,各位高手能不能给我解释一下,查询语句如下:
SELECT NAME
FROM S
WHERE NO EXISTS
(SELECT *
FROM C
WHERE NO EXISTS
(SELECT *
FROM SC
WHERE SC。S_NO=S.S_NO AND SC.C_NO=C.C_NO))
...全文
5615打赏收藏
含嵌套的 NOT EXIST 的SQL查询
今年上半年的高程考试考了含嵌套的 NO EXISTS 的SQL查询, 国防科大出版的《数据库原理》中也有这种例子,我感到很 难理解,各位高手能不能给我解释一下,查询语句如下: SELECT NAME FROM S WHERE NO EXISTS (SELECT * FROM C WHERE NO EXISTS (SELECT * FROM SC WHERE SC。S_NO=S.S_NO AND SC.C_NO=C.C_NO))
select sname
from s
where not exists
(select *
from c
where not exists
(select * from sc where sc.s# = s.s#
and sc.c#=c.c#))
1、先看第一个exists后面的那部分:
(select *
from c
where not exists
(select * from sc where sc.s# = s.s#
and sc.c#=c.c#))
先看select * from sc where sc.s# = s.s# and sc.c#=c.c#),接联查询,从sc中查询出所有“选了某门课程并且该门课程有成绩的学号、课程号以及该课程分数”,那么
where not exists
(select *
from c
where not exists
(select * from sc where sc.s# = s.s#
and sc.c#=c.c#))
的意思就是从c表中“查询出某些课程号,满足这些课程号是某些学生没有选的”
2、再看整个查询语句的意思就是“查询出学生的名字,满足没有一门课程是他没有选的”