sql两行数据合并成一行_sql学习:多表查询

本文介绍了SQL中的数据合并与表联结,包括UNION操作用于去除重复数据,以及JOIN的各种类型:交叉联结、内联结、左联结、右联结和全联结的使用场景和示例。此外,还讲解了CASE表达式用于条件判断,并给出了课后练习题以加深理解。通过学习,作者认识到SQL的实际操作需要注重细节和逻辑思维。
摘要由CSDN通过智能技术生成

一、表的加法(union)

功能:将两个表的数据合并在一起,会把两个表里重复的数据删除,如果想保留重复的数据改成union all

随堂练习

不重复:

c9ce140686563561227114c2b56ffe33.png

保留重复数据:

6d6d9e21b4dcc4dfcd11bad2379ecddc.png

二、表的联结(join)

表之间的关系:

0be69cdf5ef506701e642958707a01d1.png

常见表的联结方式:交叉联结、内联结,左联结,右联结,全联结

(1)交叉联结(笛卡尔积,cross join)

功能:将表中的每一行都与另一个表中的每一行合并在一起

交叉连结实际运用中较少

(2)内联结(inner join)

功能:查找出同时存在于两张表中的数据

运行顺序:先将表中相同列名对应的行取出来——将两个表里取出的数据交叉联结,合并以后的表有了两行表里的全部信息。

随堂练习:

90ba08461138608b0b0fabe83a9d4a2b.png

(3)左联结(left join)

功能:将左侧表中有的信息全部取出

运行顺序:先将左表中的数据读取出来——将另一张表中有左表数据相应的行取出——将两个表里的数据进行交叉联结,如果表里没有数据将产生空值

随堂练习:

f617a18ab50678b18c39ce23877f62b7.png

去掉公共部分随堂练习:

d393595deb830934307cbea814eaa65c.png

(4)右联结(right join)

功能:将左侧表中有的信息全部取出

运行顺序:先将右表中的数据读取出来——将另一张表中有右表数据相应的行取出——将两个表里的数据进行交叉联结,如果表里没有数据将产生空值

随堂练习:

39bc93a465c7b171e50dcfa6e84d17fd.png

随堂练习:去掉交叉部分

922cb8fff93f8ac97e21c7c10332b422.png

(5)全联结(full join)

功能:取两张表中的所有行,合并没有内容时显示空值。注意mysql不支持全联结。

(重要)使用场景:当实际中想要生成固定行数的表单或者特别说明要哪一张表里的全部数据,使用左/右联结,其他情况使用内联结。

sql运行顺序:子查询——from,where,group by,having——select——order by,limit

三、联结应用案例

随堂练习1:查询所有学生的学号、姓名、选课数、总成绩

036a68c10d05ca0dd4e523c265a9eacb.png

随堂练习2:查询平均成绩大于85的所有学生的学号、姓名和平均成绩

ca36a67598536147cfea9b9ec34252a3.png

随堂练习3:查询学生选课情况(查询学号,姓名,课程号,课程名称)

b203be109267de11204f920e07b0c6bd.png

注意:as 可以省略

四、case表达式

功能:进行条件判断的函数

case表达式:

case when <判断表达式> then <表达式>

else<表达式>

end

随堂练习1:

79901eff6548527b1acada265c0ba830.png

随堂练习2:

f31175d295d48bab9cf52d7f6f441077.png

本题注意:sum后面与括号之间不能有空格。

case表达式注意点:不要省略else,end一定要写,case可以写在任意sql子句里面。

case表达式使用情景:当有多个条件需要判断的时候。

随堂练习3:

c1d39e7607f18d82caa0b2ba56a57017.png

本题重点:

select里的列名只能是group by子句里的列名。

本题课程号与课程名称是一对一的关系,所以对结果不产生影响,如果不是一一对应关系,当多列分组时,这几列的值全部相同才算一组。

五、课后练习题

98a93402d7b5bbb1f04c72e1b7448bbc.png

9c57a0a320eba128f7636c57c2524345.png

cd0757597586835ccce7dcf122554ce0.png

本题根据题目意思是否队伍名为eteam表中的teamname?

fcf3588295bbc32441f94557b4f0addd.png

b8dbdc3fe4cbfcae97c3a53595437e99.png

注意:本题要真正理解left join、right join 与 inner join的区别。

8fa932c4086a8015f7b7f29ef4728d6d.png

2d2eee31fde60ee7a3ec3b01a147d1c2.png

103f24132bd402e71f166ce0db0c297d.png

本题注意去掉重复的运动员名字,理清主队和客队的关系。

dea22c1647aa12558e93955cedd946e4.png

f917ab755d10c5f22fddb6bedd5c41b3.png

c7595365d67188575ab3f0fe818e0173.png

本章学习心得:本次的学习内容听的时候容易理解,但是在实际操作中发现使用起来比较困难,一是有很多细节要注意,二是逻辑上要理的通。sqlzoo练习题中后面稍难的部分仍需多做几次慢慢理解其中的运行层次。最近两章学的较为吃力,这段时间要反复多听几次课程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值