
用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 为成绩 展开
S (SNO,SNAME,SAGE, SSEX, SDEPT) 学生关系。SNO 为学号,SNAME 为姓名,SAGE为年龄, SSEX为性别, SDEPT为系别
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩 展开
3个回答
展开全部
以上两位都是有错误的地方,选课人数应该以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))
SELECT CNAME 课程名,CNO 课程号
FROM C
WHERE CNO IN (
SELECT CNO FROM SC
GROUP BY CNO
HAVING COUNT(SNO) =(SELECT COUNT(DISTINCT SNO) FROM SC))
参考资料: 哥自己写的.
展开全部
我的思路是在SC中判断每门课被选修了多少次,如果被选修次数=学生人数 则认为被所有学生选修。总觉得这个思路不太好,可是又想不出更好的逻辑关系
select CNAME,CNO from c
where cno in (
select cno from sc
group by sno
having count(sno) = (select count(1) from s)
)
select CNAME,CNO from c
where cno in (
select cno from sc
group by sno
having count(sno) = (select count(1) from s)
)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前面的回答有一点错误应该是这样
SELECT CNAME,CNO
FROM C
WHERE CNO IN (
SELECT CNO FROM SC
GROUP BY CNO
HAVING COUNT(SNO) =(SELECT COUNT(*) FROM S))
SELECT CNAME,CNO
FROM C
WHERE CNO IN (
SELECT CNO FROM SC
GROUP BY CNO
HAVING COUNT(SNO) =(SELECT COUNT(*) FROM S))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询