2、查询“生物”课程比“物理”课程成绩高的所有学生的学号;
思路:
获取所有有生物课程的人(学号,成绩)-临时表
获取所有有物理课程的人(学号,成绩)-临时表
根据【学号】连接两个临时表:
学号 物理成绩 生物成绩
然后再进行筛选
select A.student_id,sw,tyfrom(select student_id,num as swfrom score left join course on score.course_id = course.cid where course.cname = '生物') as A
left join
(select student_id,num as tyfrom score left join course on score.course_id = course.cid where course.cname = '体育') as B
on A.student_id= B.student_id where sw > if(isnull(ty),0,ty);3、查询平均成绩大于60分的同学的学号和平均成绩;
思路:
根据学生分组,使用avg获取平均值,通过having对avg进行筛选
select student_id,avg(num)from score group by student_id having avg(num) > 60
4、查询所有同学的学号、姓名、选课数、总成绩;
select score.student_id,sum(score.num),count(score.student_id),student.snamefromscore left join student on score.student_id=student.sid
group by score.student_id5、查询姓“李”的老师的个数;
select count(tid)from teacher where tname like '李%'select count(1) from (select tid from teacher where tname like '李%') as B6、查询没学过“叶平”老师课的同学的学号、姓名;
思路:
先查到“李平老师”老师教的所有课ID
获取选过课的所有学生ID
学生表中筛选
select* from student where sid not in(
select DISTINCT student_idfrom score where score.course_id in(
select cidfrom course left join teacher on course.teacher_id = teacher.tid where tname = '李平老师')
)7、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
思路:
先查到既选择001又选择002课程的所有同学
根据学生进行分组,如果学生数量等于2表示,两门均已选择
select student_id,snamefrom(select student_id,course_idfrom score where course_id = 1 or course_id = 2) as B
left join student on B.student_id= student.sid group by student_id HAVING count(student_id) > 1
8、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
同上,只不过将001和002变成in(叶平老师的所有课)9、查询课程编号“002”的成绩比课程编号“001”课程

本文提供了一系列关于MySQL的练习题及其解答,包括对比不同科目成绩、筛选平均成绩、查询特定课程和教师相关学生等复杂查询。通过这些实例,读者可以深入理解MySQL的查询技巧和高级用法。
最低0.47元/天 解锁文章
9520

被折叠的 条评论
为什么被折叠?



