#17.查询学过编号为"02"但没有学过编号为"01"课程的学生信息和相关课程成绩
select *
from t_student sinner join t_score sc on s.stu_id = sc.s_stuid
where s.stu_id in (select sc1.s_stuid from t_score sc1 where sc1.s_cid = 02)and s.stu_id not in (select sc2.s_stuid from t_score sc2 where sc2.s_cid = 01);#18. 查询同时选修了"01"课程和"02"课程的学生信息及相关课程成绩
select *
from t_student s
where s.stu_id in (select sc1.s_stuid from t_score sc1 where sc1.s_cid = 02)and s.stu_id in (select sc2.s_stuid from t_score sc2 where sc2.s_cid = 01);#19. 查询选修了"01"课程但可能没有选修"02"课程的学生信息及相关课程成绩(不存在时显示为0)
select *
from t_student sinner join t_score sc on s.stu_id = sc.s_stuid
where s.stu_id not in (select sc1.s_stuid from t_score sc1 where sc1.s_cid = 02)and s.stu_id in (select sc2.s_stuid from t_score sc2 where sc2.s_cid = 01);#20. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩(成绩保留2位小数)
select round(avg(sc.s_score), 2), s.stu_name, s.stu_id
from t_student sinner join t_score sc on s.stu_id = sc.s_stuid
group by s.stu_name, s.stu_id
having avg(sc.s_score >= 60);#21. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的成绩总和** (没有选课的学生显示为0)
select s.stu_id, s.stu_name, COUNT(sc.s_score), sum(sc.s_score)
from t_student sinner join t_score sc on s.stu_id = sc.s_stuid
group by s.stu_id, s.stu_name;#22. 查询学过「张三」老师授课的同学的信息
select distinct s.*
from t_student sinner join t_score sc on s.stu_id = s.stu_idinner join t_course co on sc.s_cid = co.c_idinner join t_teacher t on co.c_teaid = t.tea_id
where t.tea_name = '张三' order by s.stu_id;#23. 查询没有学全所有课程的同学的信息
select s.stu_id,s.stu_name,count(sc.s_score) from t_student s inner join t_score sc on s.stu_id = sc.s_stuid inner join t_course co on sc.s_cid = co.c_id group by s.stu_id,stu_name having count(sc.s_score) != 3;#24. 查询至少有一门课与学号为"01"的同学所学相同的同学的信息(不含学号为"01"的学生)
select distinct s.* from t_student s inner join t_score sc on s.stu_id = sc.s_stuid where sc.s_cid in (select sc1.s_cid from t_score sc1 where sc1.s_stuid = 01);