用SQL语句列出全部学员都选修的课程的课程名和课程号

问题描述:已知关系模式:S(SNO,SNAME,SAGE,SSEX,SDEPT)学生关系。SNO为学号,SNAME为姓名,SAGE为年龄,SSEX为性别,SDEPT为系别... 问题描述:已知关系模式:
S (SNO,SNAME,SAGE, SSEX, SDEPT) 学生关系。SNO 为学号,SNAME 为姓名,SAGE为年龄, SSEX为性别, SDEPT为系别
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩
展开
 我来答
xl890403
2010-12-15
知道答主
回答量:13
采纳率:0%
帮助的人:12.7万
展开全部
以上两位都是有错误的地方,选课人数应该以SC表中出现的学号记录数目为基准,因为S表中存在没有选课的学生.所以,代码应该是这样的:
SELECT CNAME 课程名,CNO 课程号
FROM C
WHERE CNO IN (
SELECT CNO FROM SC
GROUP BY CNO
HAVING COUNT(SNO) =(SELECT COUNT(DISTINCT SNO) FROM SC))

参考资料: 哥自己写的.

百度网友5183fa6
推荐于2018-05-09 · TA获得超过130个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:168万
展开全部
我的思路是在SC中判断每门课被选修了多少次,如果被选修次数=学生人数 则认为被所有学生选修。总觉得这个思路不太好,可是又想不出更好的逻辑关系

select CNAME,CNO from c
where cno in (
select cno from sc
group by sno
having count(sno) = (select count(1) from s)
)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仙情雨神恋云
2010-12-15
知道答主
回答量:16
采纳率:100%
帮助的人:4.3万
展开全部
前面的回答有一点错误应该是这样
SELECT CNAME,CNO
FROM C
WHERE CNO IN (
SELECT CNO FROM SC
GROUP BY CNO
HAVING COUNT(SNO) =(SELECT COUNT(*) FROM S))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式