检索全部学生都选修的课程的课程号与课程名 ???

osrui 2008-03-14 11:36:02
数据库的三个基本表
学生 S(S#,SNAME,AGE,SEX)
选修 SC(S#,C#,GRADE)
课程 C(C#,CNAME,TEACHER)

如何 检索全部学生都选修的课程的课程号与课程名 ?
...全文
6324 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
leigeha 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
SELECT C.C# FROM C
WHERE NOT EXISTS(
SELECT 1 FROM (
SELECT S#,C# FROM S,C
MINUS
……

[/Quote]
中的MINUS是什么意思??求解
guanlianan 2011-10-18
  • 打赏
  • 举报
回复
有答案,但是不知道思路是什么?谁能解析一下呀
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
这个简单啊,网上搜一下就得到答案了.
hebo2005 2008-03-14
  • 打赏
  • 举报
回复
其实如果不显示学生名字的话,不用关联S 表的
select a.c#,a.cname
from
//下面的是统计每门课程选择的人数
(select c.c#,c.cname,count(sc.s#) c_s
from sc,c
where sc.c#=c.C#
group by c.c#,c.cname)a,
,
//下面的是统计总的学生数
(select count(s#) all_s from s) b
//最后两个结果集关联下,如果第一个结果集中的选择人数=总的学生数,则显示出来
where a.c_s=b.all_s
临摹 2008-03-14
  • 打赏
  • 举报
回复
如果S表的每个S#对应一个学生的。

SELECT C#,CNAME FROM C WHERE C# IN(
SELECT C# FROM SC GROUP BY S# HAVING COUNT(1)=(SELECT MAX(ROWNUM) FROM S)
)

未测试,供参考。
osrui 2008-03-14
  • 打赏
  • 举报
回复
你贴的代码,我看得不是很清楚哦,能不能粗略解释一下?
hebo2005 2008-03-14
  • 打赏
  • 举报
回复

select a.c#,a.cname
from
(select c.c#,c.cname,count(s.s#) c_s
from s,sc,c
where a.s#=sc.s#
and sc.c#=c.C#
group by c.c#,c.cname)a,
,
(select count(s#) all_s from s) b
where a.c_s=b.all_s
osrui 2008-03-14
  • 打赏
  • 举报
回复
哈哈,终于明白了!多谢多谢!
doer_ljy 2008-03-14
  • 打赏
  • 举报
回复
使用count的方法不行吧?
现在的问题是记录机比较。
使用count则必须要求选修表里的所有记录的课程、学生字段都是学生表和可能表的子集。
这对数据完成性的要求较高,当然这种方法也比较简单。
也可以这么做。

SELECT C.C# FROM C
WHERE NOT EXISTS(
SELECT 1 FROM (
SELECT S#,C# FROM S,C
MINUS
SELECT S#,C# FROM SC) TA
WHERE TA.C#=C.C#)

17,141

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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