含嵌套的 NOT EXIST 的SQL查询

xuxinjun 2004-08-11 05:40:55
今年上半年的高程考试考了含嵌套的 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))
...全文
560 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wasabia 2005-04-20
  • 打赏
  • 举报
回复
帮顶!
参考我的问题:
http://community.csdn.net/Expert/topic/3883/3883804.xml?temp=.6211664
再多找几本书看看,。。尽在不言中,很难解释:)
pxboy 2005-04-18
  • 打赏
  • 举报
回复
楼上经验之谈,很有效
greecer 2005-04-17
  • 打赏
  • 举报
回复
负负得正,记住这个就行了。当时我也理解了好久。
rocklabzhang 2005-04-17
  • 打赏
  • 举报
回复
s表存储学生的信息
c表存储课程信息
sc表存储学生成绩

查询返回的结果是所有课程都有成绩的学生的名字

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、再看整个查询语句的意思就是“查询出学生的名字,满足没有一门课程是他没有选的”

所以整个查询结果就是:所有课程都选了的学生的名字

我也是看了好几分钟才看懂的,但我想我肯定没描述清楚,自己思忖一下吧
klbt 2004-08-12
  • 打赏
  • 举报
回复
其实就是特殊的子查询
当某子sql查询结果不存在时,查找name

2,947

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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