第7章 集合运算

7-1 表的加减法

学习重点:

  • 集合运算就是对满足同一规则的记录进行的加减等四则运算。
  • 使用UNION(并集)、INTERSECT(交集)、EXCEPT(差集)等集合运算符来进行集合运算。
  • 集合运算符可以去除重复行。
  • 如果希望集合运算符保留重复行,就需要使用ALL选项。

表Product2
在这里插入图片描述
使用UNION对表进行加法运算:
在这里插入图片描述

集合运算的注意事项

♦ 注意事项1——作为运算对象的记录的列数必须相同。
♦ 注意事项2——作为运算对象的记录中的列的类型必须一致。
从左侧开始,相同位置上的列必须是同一数据类型。
♦ 注意事项3——可以使用任何SELECT语句,但ORDER BY子句只能在最后使用一次。
通过UNION进行并集运算时可以使用任何形式的SELECT语句,之前学过的WHERE、GROUP BY、HAVING等子句都可以使用。但是ORDER BY只能在最后使用一次。
在这里插入图片描述

包含重复行的集合运算——ALL选项

只需要在UNION后面添加ALL关键字就可以了。
在这里插入图片描述
☝ 在集合运算符中使用ALL选项,可以保留重复行。

选取表中公共部分——INTERSECT

选取两个记录集合中公共部分的INTERSECT(交集)。MySQL不支持INTERSECT。

记录的减法——EXCEPT

MySQL也不支持。

7-2 联结(以列为单位对表进行联结)

学习重点:

  • 联结(JOIN)就是将其他表中的列添加过来,进行“添加列”的集合运算。UNION是以行(纵向)为单位进行操作,而联结则是以列(横向)为单位进行的。
  • 联结大体上分为内联结和外联结两种。首先请大家牢牢掌握这两种联结的使用方法。
  • 请大家一定要使用标准SQL的语法格式来写联结运算,对于那些过时的或者特定SQL中的写法,了解一下即可,不建议使用。
什么是联结

前一节学习的UNION、INTERSECT和EXCEPT是以行方向为单位进行操作。
联结的图示:
在这里插入图片描述

内联结——INNER JOIN

将两张表进行内联:
在这里插入图片描述
⚪ 内联要点1——FROM子句
别名不是必须的。
☝ 进行联结时需要在FROM子句中使用多张表。
⚪ 内联要点2——ON子句
我们可以在ON之后指定两张表联结所使用的列(联结键),本例中使用的是商品编号(product_id)。ON是专门来指定联结条件的,它能起到与WHERE相同的作用。需要指定多个键时,同样可以使用AND、OR。在进行内联结时ON子句是必不可少的(如果没有ON会发生错误),并且ON必须书写在FROM和WHERE之间。
在这里插入图片描述
联结条件也可以使用“=”来记述。在语法上,还可以使用<=和BETWEEN等谓词。
⚪ 内联结要点3——SELECT子句
☝使用联结时SELECT子句中的列需要按照“<表的别名>.<列名>”的格式进行书写。

■ 内联结和WHERE子句结合使用
在这里插入图片描述

外联结——OUTER JOIN

将两张表进行外联结:
在这里插入图片描述
⚪ 外联结要点1——选取出单张表中全部的信息
内联结只能选取出同时存在于两张表中的数据,因此只在Product表中存在的2中商品并没有出现在结果之中。相反,对于外联结来说,只要数据存在于某一张表中,就能够读取出来。
⚪ 外联结要点2——每张表都是主表吗?
外联结还有一点非常重要,那就是要把那张表作为主表。最终的结果中会包含主表内所有的数据。指定主表的关键字是LEFT和RIGHT。顾名思义,使用LEFT时FROM子句中写在左侧的表是主表,使用RIGHT时右侧的表是主表。本例中使用了RIGHT,因此,右侧的表,也就是Product表是主表。

改写后外联结的结果完全相同:
在这里插入图片描述

3张以上的表的联结

InventoryProduct(库存商品)表
在这里插入图片描述
在这里插入图片描述

交叉联结——CROSS JOIN

笛卡尔积。

练习题:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值