表为 S T C SC;经常出现的这几个表 学生 老师 课程 选课关系
按照书上这个语句可以理解为 C表中不存在一门课程该学生没有学select sname
from s
where not exists /*C表中不存在一门课程*/
(select *
from c
where not exists /*该学生没有学*/
(select *
from sc
where sc.s#=s.s# and sc.c#=c.c#));
看不明白 反应不过来 如果单纯一个exists我还能理解 两个就理解不了了
哪位大神能通俗的给小弟我解释一下呢?
谢谢给位了
按照书上这个语句可以理解为 C表中不存在一门课程该学生没有学select sname
from s
where not exists /*C表中不存在一门课程*/
(select *
from c
where not exists /*该学生没有学*/
(select *
from sc
where sc.s#=s.s# and sc.c#=c.c#));
看不明白 反应不过来 如果单纯一个exists我还能理解 两个就理解不了了
哪位大神能通俗的给小弟我解释一下呢?
谢谢给位了
解决方案 »
- 在java中,有哪几个方法在所有异常类中都存在
- 很简单的问题
- 如何利用反射机制侵入别人电脑
- 大家帮忙看下这个类,设计来来做什么的!是GJC的一个工具类
- 关于客户端接收服务器端大量发送的udp包
- 关于JTextArea()
- JDBC 连接SQLServer的奇怪问题!!!!难道是微软的BUG?
- Exception in thread "main" java.lang.NoClassDefFoundError :~~ 。怎么解决?
- 用Jbuilder开发java程序时如何做成.exe应用程序呢?
- jdbTable漏洞
- 求教:java对文件操作,如何在文件中指定位置插入一些内容
- 求java Date用法
选择所有该学生所选课程:select * from sc where sc.s#=s.s# and sc.c#=c.c#
否定:该学生所选漏的课程:select * from c where not exists ( 上一句 )
再否定:没有任何选漏课程的:select sname from s where not exists ( 上一句 )
研究此类问题,可以先简化一步:找出选了所有课程的学号。
那么问题就只需要集中在: sc 和 c 这两张表就够了。
c表是所有课程,目标就是在sc中找出学满c的学号记录。
其实方法也不唯一,比如可以看c表总记录数,那么sc表中记录数跟c表相同的说明也学满了。Select 学号
From sc
Group By 学号
Having Count(课程号) >= (
Select Count(课程号) From c
)