sql 相加_sql第5关

一、表的加法

  1. 两张表相加,去掉重复项:union
  2. 两张表相加,保留重复项:union all
  3. 随堂练习:

b73d4168d1ec8173ae9ed90bf1a70987.png

1733cc558688454bf32ca2cfeee527f3.png

二、表的联结

1、有哪几种联结方式:

ce5c60f14075630c1e442b02454bc804.png

Cross join :表中的每一行都与另一张表中的每一行合并在一起(行数为:两张表的乘积),

不常用,但它是其他联结的基础

67a2b55e24e7fe2290cd189468441b48.png

Inner join:查找出同时存在两张表中的数据

84242cab607202c569f85838f384363b.png

运算原理:

43e65d1f904dcf880626ba94c78c0c37.png

f830d3bb42635cd8c47528a6da1f07ff.png

随堂练习:

fda58cf8d0de41f7514a027432a9dd76.png

81d6fbdd4fb391b82f3140345eb76153.png

Left join :将左侧的表格内容全部提取出来

b8322ad33882a09d9f8ccb4dab9647da.png

运行原理:

a0dee11ec7e86ca13e6a9abfd3fe276a.png

6727aca96f9a930c7d2b223705833cc1.png

随堂练习:

7773c11594433fd1f853947b40629068.png

在left join 的基础上,只取左表内容,但是去掉共同的部分,:

e758d17da3eceb81ab4c73a9406ecce9.png

随堂练习:

7eea1363a8f9c432485f2b8a5faa355f.png

Right join :取出右边表格的全部数据

ea503c4e85bc58bafdc5988562690913.png

运行原理:

1247190caeb899e7f97fccc22eed5f37.png

cbe383347a7efa6a81a75bb5dc0ad1a3.png

随堂练习:

0ddf6baa9fb41167de4c015e1a2931f0.png

在right join 的基础上,只取右表内容,但是去掉共同的部分:

3a799b43ce717807e7c812165d5c912b.png

随堂练习:

f73fbc70bbae5b2955d38d4d1ad4e486.png

Full join :取左右表的所有行(没有匹配值的时候,用空值来填充,但是my sql 不支持全连接)

bcd61a06430e89e89dc0094e5cb14f8a.png

总结:

eae40dc2c94ecd50464e6d1cba9756b5.png

4d95278db0e879bf95461576b5bc6cb6.png

三、联结应用案例

1、随堂练习:

思路

348c23cab8c25a8121fb97608455c1ea.png

7aeb1e76409b74902e9fcd9d7356a200.png

49ba6200530c1809b5ab5b5530221d26.png

问题:暂时没搞明白:

1f7b69ed0dcca6d05d21ef0d625bb2d2.png

随堂练习2:

0702bd953d8a3ecf973c0caa15577a21.png

997e234985c0949837892870f95d6a08.png

随堂练习3:

76722f0d3d907f63e641402db74af6bc.png

2a853ce10f26cde5657728df77909baf.png

26e9b0d65c516487546ad4a6a9128352.png

注:老师用的是inner join ,自己用left join 试写,也是ok,

【问】发现有时候left join和inner join运行的结果一样,是不是就都可以,以运行结果为准?还是应该严格区分?

【答】只是恰好结果一样,比如“学生表”和“成绩表联结。

如果所有学生都选课了,那么left join和inner join结果是一样的。

如果一部分学生没选课,那么eft join和inner join就不一样。

所以,选择哪种联结,不是看查询结果。而是在一开始要根据你想要保留哪部分数据来选择用哪种联结,然后才是写SQL。

四、CASE表达式:

006f421409530c74a308c9f79d606858.png

案例1:

6cf31879a6355c17676e291bde6bd5ab.png

案例2:

d63865be8eda5c15b941d0926581d38b.png

第一步:先写出每门课程人数:

e995f8a8170d9dd09c99224817b1008a.png

第二步:在细化成case函数

31d021538534e1c284e94554c163bc57.png

运算步骤如下:

37eb374779e4df4955f91d1c67db3087.png

随堂练习:

915f718f491ff055d1d3b526dc9913cb.png

注意事项:

0bd52248c64e187344fd24e9ef52c04d.png
  1. else 可以不写,但尽量写上
  2. end 一定要写
  3. case函数不一定用在select后面,可以用在任何地方。

案例3:

2cbb168d585af574544cb7740d297698.png

00de592f2d24ddd24bb13d3cfe2cb7f6.png

随堂练习:

0b261c15b5fcdb1753f7babdd0d6550e.png

Group by 后当用几个列来分组时,这几个列的值全部相同才算一组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值