日期:2014-05-19  浏览次数:20527 次

请教多表查询的问题,谢谢!!
学生表Student           包含以下几个字段
(Sno     ,   Sname     ,   Ssex     ,   Sage     ,   Sdept)
    学号       姓名           性别         年龄           所在系

课程表Course
(Cno       ,   Cname       ,   Cpno         ,     Ccredit     )
课程号       课程名       选修课号         学分

学生选课表Sc
(Sno     ,     Cno       ,     Grade   )
    学号         课程号       成绩

要求查询选修了全部课程的学生姓名

------解决方案--------------------
select sname from student
where sno in (
select sno from sc
group by sno
having count(*) =
( select count(*) from course)
)
------解决方案--------------------
楼上的朋友用了嵌套,用一个jion吧,看起来比较繁琐了,呵呵

select a.* from Student as a
join (
select distinct Sno from Sc
group by Sno
having count(distinct Cno) = (
select count(*) from Course
)
) as b on a.Sno = b.Sno