5 union查询_数据分析之多表查询

本文详细介绍了多表查询的关键概念,包括UNION操作用于合并两个表的数据,以及各种JOIN类型,如INNER JOIN, LEFT JOIN, RIGHT JOIN和FULL JOIN。通过实例和练习,帮助读者理解如何在SQL中进行复杂的数据联结和筛选,同时提到了CASE表达式的应用,用于处理多条件分段统计问题。" 128035725,7947649,小红书搜索引流攻略:下拉词优化与笔记排名技巧,"['内容运营', '小红书运营', 'SEO优化']
摘要由CSDN通过智能技术生成

a5869bddf0cc08487caa7287050c8a05.png

多表查询顾名思义就是数据同时从多张表中获得,查询语句牵涉到多张表,我们主要从以下几个方面介绍。

一、表的加法(union)

表的加法就是将两个表的数据按照行合并在一起。使用到的关键词是union,需要加法的两个表列名有相同的。

select <列名1>,<列名2>,...
from 表名1
union
select <列名1>,<列名2>,...
from 表名2;

注意:union默认是不保留重复行,如果需要保留重复号用union all;

/*保留重复行*/
select <列名1>,<列名2>,...
from 表名1
union all                 
select <列名1>,<列名2>,...
from 表名2;

练习:

b0a4c2d5b6123a72851aeecde78f0d1a.png

dd909f8e718ecd7dbdf18bbaa6ab892d.png

二、表的联结

1、交叉联结(cross join)

交叉联结又称为笛卡尔积,将表中的每一行与另一张表的每一行联结在一起;合并后的行数是两个表行数的乘积。

c841701315da4b532dfcb39ef7cc10e3.png

典型例子:扑克牌的花色和13个数字,得到52张牌。

2、内联结(inner join)

内联结是查找出同时存在于两张表中的数据。内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。用文氏图表示如下:

486559310feb9f4c78e9bcc2e0d6bbe2.png

示例:

select a.学号,a.姓名,b.课程号
from student as a inner join score as b
on a.学号=b.学号;       //联结条件

练习:

324cafb4c78558d0a14348739764ace5.png

3、左联结(left join)

左联结是以左表为基准,将a.stuid = b.stuid的数据进行连接,然后将左表没有的对应项显示,右表的列为NULL。用文氏图表示左联结:

febb4ac94cb0eca56522efc803459a66.png

示例:

select a.学号,a.姓名,b.课程号
from student as a left join score as b
on a.学号=b.学号;

如果要去掉公共部分,用文氏图表示如下:

752b4c28862ecf4ab01d4444ed1f449a.png
Select a.学号,a.姓名,b.课程号
From student as a left join score as b
On a.学号=b.学号
Where b.学号 is null;

练习:

ead67feba0938fee27a2fd449b910762.png

4b9ee3b5a2eeef047fcc43699edd2904.png

4、右联结(right join)

右联结是以右表为基准,将a.stuid = b.stuid的数据进行连接,然以将右表没有的对应项显示,左表的列为NULL。用文氏图表示如下:

1f502e672542c774459f74a92f77616f.png
select a.学号,a.姓名,b.课程号 
from student as a right join score as b 
on a.学号=b.学号;

如果要去掉公共部分,用文氏图表示如下:

390aee747e804492851466a4486b2ae8.png
Select a.学号,a.姓名,b.课程号
From student as a right join score as b
On a.学号=b.学号
Where a.学号 is null;

练习:

3480adb99b4e562aee38e1112708b252.png

c09ddde1f5768efd8a07c95aba5b875b.png

5、全联结(full join)

全联结:完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。用文氏图表示如下:

7871efe5c23fce872ec563a51a5c0c72.png

6、SQL执行顺序

c3843800869e4d8fac4ad6fab2d35d66.png

7、练习:联结

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

7e2dd76d55b8f1f0eebf05a2485bf6eb.png

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

27ef4c20ba8b08b942e1c2dae43a7a85.png

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

92ec5ca1059e4fccdbd8a2b2ce1d72f8.png

三、case表达式

针对有多种情况需要分段的应用

Case when<判断表达式> then<表达式>
  when<判断表达式> then<表达式>
when<判断表达式> then<表达式>
….
else <表达式>
end

练习:

1)查询出每门课程的优秀人数(成绩>=90)、良好人数(80<=成绩<90)和及格人数(60<=成绩<80);

c5250d53da06d6f81827c87f92396bb4.png

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

067683a351972efef359ac3263cb966b.png

四、练习:sqlzoo The JOIN operation/zh

a12b4141fe0caab394d8310990503f2d.png

38d12e2eb8dbf6ae11dba0a181de2926.png

f344f3bca6e71bef89c4b53bc4d7141a.png

5837faeffd3f6347ba05138508b7bbf1.png

fe63b7f75fddeddf9ec75b56478f08e0.png

d6482e3c5ae6516594925d65408a5465.png

fd9978810a63a02261de480d905d1a34.png

6d7664bc565454a2fa9ca576b197712e.png

aaaf07c5b073850ab764c0aff5773650.png

9a8d63420f1468cd8bbc38b7aeb56b81.png

8851210172a26848944d27ec2e016171.png

f4282e9fc6e25a8c860892d4b851c467.png

94526150ece5d9da9324211d956e1cd0.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值