鸽主姓名查询成绩_从零学会SQL:多表查询

学习纲要

  • 表的加法
  • 表的联结
  • 联结应用案例
  • case表达式

一、表的加法

加法语句:union、union all

(一)应用举例

-- union查询
select 课程号,课程名称
from course
union 
select 课程号,课程名称
from course1;

ff530fceb8b667bf4d435f7c2d076a6b.png
-- union all查询
select 课程号,课程名称
from course
union all
select 课程号,课程名称
from course1;

9a74381a229d92216b27cf57b0cdaaca.png

二、表的联结

交叉联结(cross join)、内联结(inner join)、左联结(left join)、右联结(right join)、全联结(full join)

一、应用举例

-- 内联结
select a.学号,a.姓名,b.课程号
from student1 as a inner join score1 as b on a.学号=b.学号;

4d99a5c0d4b98256b0905d5a176959e4.png
-- 左联结
select a.学号,a.姓名,b.课程号
from student1 as a left join score1 as b on a.学号=b.学号;

f5d7a35cc6714a1be345d1ddb079e20e.png
-- 完全左联结
select a.学号,a.姓名,b.课程号
from student1 as a left join score1 as b on a.学号=b.学号
where b.学号=Null;

aacffb57e6e24645064d84a01886e407.png
-- 右联结
select a.学号,a.姓名,b.课程号
from student1 as a right join score1 as b on a.学号=b.学号;

2a4ee19fb7060bc3e215477f0381d832.png
-- 完全右联结
select a.学号,a.姓名,b.课程号
from student1 as a right join score1 as b on a.学号=b.学号
where b.学号=Null;

8887b4c13583e3acfb02450bcc872f4a.png

三、联结应用案例

(一)练习

1.查询所有学生的学号、姓名、选课数、总成绩

-- 查询所有学生的学号、姓名、选课数、总成绩
select a.学号,a.姓名,count(b.课程号) as 选课数,sum(b.成绩) as 总成绩
from student as a left join score as b on a.学号=b.学号
group by a.学号;

ab53472e42bce6d489a218450c7efe5c.png

2.查询平均成绩大于85的所有学生的学号、姓名和平均成绩

-- 查询平均成绩大于85的所有学生的学号、姓名和平均成绩
select a.学号,a.姓名,avg(b.成绩) as 平均成绩
from student as a left join score as b on a.学号=b.学号
group by a.学号
having 平均成绩 > 85;

4216364a05113f1d5c2786c7cef1750a.png

3.查询学生选课情况:学号、姓名、课程号、课程名称

-- 查询学生选课情况:学号、姓名、课程号、课程名称
select a.学号,a.姓名,c.课程号,c.课程名称
from student as a inner join score as b on a.学号=b.学号 
inner join course as c on b.课程号=c.课程号;

3aaa67273cc2437ba4be1e15b46684df.png

四、case表达式

(一)练习

1.查询出每门课程的及格人数和不及格人数

-- 查询出每门课程的及格人数和不及格人数
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 课程号;

5454b76cc89e626e5aa5439ad076b8f7.png

2.使用分段100-85,85-70,70-60,<60来统计各科成绩,分别统计各分段人数:课程号和课程名称

/*使用分段100-85,85-70,70-60,<60来统计各科成绩,
分别统计各分段人数:课程号和课程名称*/
select a.课程号,b.课程名称,
sum(case when 成绩 between 85 and 100 then 1 else 0 end) as '[85-100]',
sum(case when 成绩>=70 AND 成绩<85 then 1 else 0 end) as '[70-85]',
sum(case when 成绩>=60 AND 成绩<70 then 1 else 0 end) as '[60-70]',
sum(case when 成绩<60 then 1 else 0 end) as '[<60]'
from score as a right join course as b on a.课程号=b.课程号
group by a.课程号,b.课程号;

100a696bf18f8a3578a00c308b117381.png

总结

a2fdcc290467eecf22358d72b71d1ca1.png

sqlzoo练习

ce6d56567ba2f4b042d787b065675607.png

16868e9411bb859f4dbcd7a26650be99.png

9a911ccbd246082dc82280d21988833a.png

da670dea0605cb2dff6b04269953d90f.png

d90bd9ce94313cb944bf549739e8c54a.png

497b6650cf0e805701a63894b0cd52b6.png

77b3af0760a47dc5c75915a12778f91d.png

f21684fcfb3b8ef3899f3f065cc5af45.png

a8916dcee06cd5678a847d9004c33cd4.png

9b2f00fb9a23044ebedc14708b3768dd.png

588c4edb4909937c0689c7c4fef1f8dd.png

d18889d7a4832825ccd8b77f7e74f9ae.png

18ed6cfdb508bf749d2d7261dbf77834.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值