SQL语句查询指定的数据,查询只选择了指定4门课程的学生

【记录问题,还未一定验证正确性】

例如有如下数据:

学生表stu[stu_id, stu_name]
1, xiaoming;
2, xiaofang;
3, xiaozhi;


课程表course[course_id, course_name]
a, '语文';
b, '数学';
c, '英语';
d, '物理';
e, '化学';
f, '生物';
学生选课表t_stu_course[stu_id, course_id]
1, a;
1, b;
1, c;
1, d;
2, a;
2, b;
2, c;
3, b;
3, d;
3, e;
3, f;
查询出只选择了[语文、数学、英语、物理]这四门课程的学生, 所以只有[1, xiaoming]选择[a,b,c,d]这四门课程
--begin
--找出course_id只能是这个4个的数据的stu_id
select stu_id, count(stu_id) ks
  from t_stu_course
--在A集合里面找出course_id只能在这4个值中间的
 where course_id in ('语文',
                     '数学',
                     '英语',
                     '物理')
--再次根据stu_id分组,已计算课数列ks
 group by stu_id
having stu_id in
--找出只有4个数据的所有stu_id [我们称下面SQL语句查出来的数据叫做A集合]
 (select stu_id
    from t_stu_course
   group by stu_id
  having count(stu_id) = 4)
--课数列必须等于4
and count(stu_id) = 4
--end


你可能感兴趣的:(数据库)