日期:2014-05-17  浏览次数:23224 次

检索全部学生都选修的课程的课程号与课程名 ???
数据库的三个基本表 
学生 S(S#,SNAME,AGE,SEX) 
选修 SC(S#,C#,GRADE) 
课程 C(C#,CNAME,TEACHER) 

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


------解决方案--------------------
SQL code

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

------解决方案--------------------
如果S表的每个S#对应一个学生的。
SQL code

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

------解决方案--------------------
其实如果不显示学生名字的话,不用关联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