MySQL经典50题目,必须拿下!
Posted 菜鸟学Python
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL经典50题目,必须拿下!相关的知识,希望对你有一定的参考价值。
-
分组统计求和,百分比 -
如何利用SQL实现排序 -
having使用 -
union拼接
5个题目是:
-
查询不同 老师所教不同 课程平均分从高到低显示 -
查询所有课程的成绩第2名到第3名的学生信息及该课程成绩 -
统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比 -
查询学生的平均成绩及名次 -
查询各科成绩前三名的记录
题目21
题目需求
查询不同老师所教不同课程平均分从高到低显示
分析过程
涉及到的表主要是
老师:Teacher
课程:Course,作为主表
成绩:Score
通过3个表的连接求出来即可
SQL实现
先找出每个老师教授了哪些课程:
select
c.c_name
,t.t_name
from Course c
left join Teacher t
on c.t_id = t.t_id;
将上面的结果和成绩表连接起来:
select
c.c_name
,t.t_name
,round(avg(s.s_score),2) score -- 课程分组后再求均值
from Course c -- 主表,通过两次连接
left join Teacher t
on c.t_id = t.t_id
left join Score s
on c.c_id = s.c_id
group by c.c_id -- 课程分组
order by 3 desc; -- 降序
题目22
题目需求
查询所有课程的成绩第2名到第3名的学生信息及该课程成绩
分析过程
成绩:Score
学生信息:Student
我们通过取出每科的第2、3名拼接起来再取出学生信息
SQL实现
自己的方法
1、课程表和成绩表连接起来,显示所有的课程和成绩信息
select
s.s_id
,s.c_id
,s.s_score
,c.c_name
from Score s
join Course c
on s.c_id = c.c_id
2、查出全部的语文成绩
select s.s_id, s.s_score, c.c_name
from Score s
join Course c on s.c_id = c.c_id
where c.c_name = '语文'
order by s.s_score desc;
3、我们找出语文的第2、3的学生
select s.s_id, s.s_score, c.c_name
from Score s
join Course c on s.c_id = c.c_id
where c.c_name = '语文'
order by s.s_score desc
limit 1, 2;
4、同时求出语文、数学、英语的分数,并且通过union
拼接
-- union连接
(select s.s_id, s.s_score, c.c_name
from Score s
join Course c on s.c_id = c.c_id
where c.c_name = '语文'
order by s.s_score desc
limit 1, 2)
union
(select s.s_id, s.s_score, c.c_name
from Score s
join Course c on s.c_id = c.c_id
where c.c_name = '数学'
order by s.s_score desc
limit 1, 2)
union
((select s.s_id, s.s_score, c.c_name
from Score s
join Course c on s.c_id = c.c_id
where c.c_name = '英语'
order by s.s_score desc
limit 1, 2))
5、将上面的结果学生信息表进行连接即可
好歹是实现了
以上是关于MySQL经典50题目,必须拿下!的主要内容,如果未能解决你的问题,请参考以下文章