casewhen多条件查询_零基础学习SQL-多表查询(五)

485de1513641660cf091f6521a421c50.png

一、个人感受

为什么要加个人感受?

一篇文章分享不该只有那些枯燥的学习整理和课后作业,所以接下来的文章写作,我会尽量加一些自己的个人想法以及目前自己遇到问题的解决思路,从而更好的分享自己的学习过程。

最近一周的自己?

选择一个目标,开始行动是比较容易,最难的是漫长学习过程中,会遇到的负面情绪和学习疲劳。而我也不例外,过去的半个月几乎半停懈的状态,导致学习的进度变慢。所以,我冷静下来进行了一次自我分析,并且做出了一些战略上的改变:

1、目标制定趋于适合自己,从深度出发,只把重要的事情做好。

2、调整作息,加强身体锻炼,搭建一个健康的身体系统。

3、优化GTD管理,将每日工作计划进一步详细安排,做到每日按部就班的时间表。

4、互相照镜子,增加学习的反馈,通过社群内打卡和文章写作方式。

二、学习内容

1、表的加法

1.1.知识点

f28ce83875facebb2f6b2c586190bc6d.png

1.2.练习

-- 将两张课程表合并为一张表格,保留重复值
select 课程号,课程名称
from course
union all
select 课程号,课程名称
from course1;

2、表得联结

2.1.知识点:

99bddf2b03b04124e8e4dbcd569ce183.png

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运行顺序

61516c3164dc9d105ab6ca777475ea0c.png

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.知识点

8a2e89e85aae140a1470a2e71f2f2391.png

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的查询难度渐渐增加,不仅仅需要去理解,还需要通过反复的实操练习才能够驾驭自如,所以,接下来的时间就是更多的去实操练习。

附上一张图,为此节课程多表查询总结。

f46bd498eb765f3f0996ccc7ed8b6f82.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值