SQL语句

问题: 已知有S(学生表),表结构为sid(学号),sname(姓名)。

            有C(课程表),表结构为cid(课程id),cname(课程名)。

            有SC(成绩表),表结构为sid(学号),cid(课程id),score(成绩)。

SC表中会有脏数据,比如重复的数据,不存在的学号的成绩。

求选了所有课程的学生。

select s.sid,s.name from S s inner join (
  select sid,COUNT(DISTINCT cid,sid) from sc group by sid having count(DISTINCT cid,sid)=
(select count(*) from c)
) tmp on s.sid=tmp.sid;

这里通过inner join来过滤掉学号不存在的脏数据,用 count(distinct cid,sid) 来对重复的课程数据去重。

通过select count(*) from c 来查询课程总数。 

posted @ 2017-10-20 23:38  cheerupWoo  阅读(97)  评论(0编辑  收藏  举报