一、个人感受
为什么要加个人感受?
一篇文章分享不该只有那些枯燥的学习整理和课后作业,所以接下来的文章写作,我会尽量加一些自己的个人想法以及目前自己遇到问题的解决思路,从而更好的分享自己的学习过程。
最近一周的自己?
选择一个目标,开始行动是比较容易,最难的是漫长学习过程中,会遇到的负面情绪和学习疲劳。而我也不例外,过去的半个月几乎半停懈的状态,导致学习的进度变慢。所以,我冷静下来进行了一次自我分析,并且做出了一些战略上的改变:
1、目标制定趋于适合自己,从深度出发,只把重要的事情做好。
2、调整作息,加强身体锻炼,搭建一个健康的身体系统。
3、优化GTD管理,将每日工作计划进一步详细安排,做到每日按部就班的时间表。
4、互相照镜子,增加学习的反馈,通过社群内打卡和文章写作方式。
二、学习内容
1、表的加法
1.1.知识点
1.2.练习
-- 将两张课程表合并为一张表格,保留重复值
select 课程号,课程名称
from course
union all
select 课程号,课程名称
from course1;
2、表得联结
2.1.知识点:
2.2练习
练习1.内联结
-- 查找两张表格中通过学号建立关系的数据,并显示学号,姓名,课程号
select a.学号,a.姓名,b.课程号
from sutdent as a inner join score as b
on a.学号=b.学号;
练习2.左联结
-- 查找学生信息,包括学号,姓名,课程号
select a.学号,a.姓名,b.课程号
from student as a left join score as b
on a.学号=b.学号;
where b.学号 is null;
2.3.sql运行顺序
3、联结应用案例
作业一:查询所有学生的学号、姓名、选修课数、总成绩
/*
翻译:
1.学号、姓名(学生表student)
2.选课数(每个学生的选课数目:成绩表score,按学号分组,对课程号计数count)
3、总成绩(每个学生的总成绩:成绩表,按学号分组,对成绩求和sum)
分析思路
select 查询结果[学号,姓名,选修课数,总成绩]
from 从那张表中查询数据(联结)[学生表student,成绩表score,通过学号左联结]
where 查询条件[没有]
group by 分组[按照学号分组,分别求总成绩sum(成绩)和求课程数count(课程号)]
having 对分组结果指定条件[没有]
order by 对查询结果排序[没有]
limit 从查询结果中取出指定行[没有]
*/
select a.学号,a.姓名, count(b.课程号) as 选修课数,sum(b.成绩) as 总成绩
from student as a left join score as b
on a.学号=b.学号
group by a.学号;
作业二:查询平均成绩大于85的所有学生的学号、姓名和平均成绩
/*
翻译
1.查询所有的学号、姓名、平均成绩,
学号、姓名(学生表student)
平均成绩(每个学生的平均成绩,在成绩表score,按照学号分组,平均成绩avg(成绩))
2、平均成绩>85
分析思路
select 查询结果[学号,姓名,平均成绩]
from 从那张表中查询数据(联结)[学生表student,成绩表score,通过学号左联结]
where 查询条件[没有]
group by 分组[按照学号分组,分别求平均成绩avg(成绩)]
having 对分组结果指定条件[平均成绩avg(成绩)>85]
order by 对查询结果排序[没有]
limit 从查询结果中取出指定行[没有]
*/
select a.学号,a.姓名,avg(b.成绩) as 平均成绩
from student as a left score as b
on a.学号=b.学号
group by a.学号
having avg(b.成绩)>85;
作业三、查询学生的选课情况:学号,姓名,课程号,课程名称
/*
翻译:
1.学号、姓名(学生表student)
2.课程号、课程名称(课程表course)
3.通过第三张表(成绩表 socre)中的学号和课程号建立关系
*/
select a.学号,a.姓名,c.课程号,c.课程名称
from student as a inner join score as b
on a,学号=b.学号
inner join course b
on b.课程号=c.课程号;
4、case表达式
4.1.知识点
4.2.练习
练习一:查询出每门课程的及格人数和不及格人数
select 课程号
sum(case when 成绩>=60 then 1 else 0
end) as 及格人数
sum(case when 成绩<60 then 1 else 0
end) as不及格人数
from score
group by 课程号
练习二:使用分数段[100-85],[85-70],[70-60],[<60]求各科成绩,分别统计各分数段人数:课程ID和课程名称
select a.课程号,b.课程名称,
sum(case when 成绩 between 85 and 100 then 1 else 0
end)as '[100-85]',
sum(case when 成绩>=70 and 成绩<85 then 1 else 0
end)as '[85-70]',
sum(case when 成绩>=60 and 成绩<70 then 1 else 0
end)as '[70-60]',
sum(case when 成绩<60 then 1 else 0
end)as '[<60]'
from score as a right course as b
on a.课程号=b.课程号
group by a.课程号,b.课程名称;
三、总结
从复杂查询开始,mysql的查询难度渐渐增加,不仅仅需要去理解,还需要通过反复的实操练习才能够驾驭自如,所以,接下来的时间就是更多的去实操练习。
附上一张图,为此节课程多表查询总结。