第7章 集合运算


7-1 表的加减法

在这里插入图片描述


  • 什么是集合运算

    集合在数据库领域表示记录的集合,具体来说,表、视图和查询的执行结果都是记录的集合。所谓集合运算,就是对满足同一规则的记录进行的加减等四则运算。通过集合运算,可以得到两张表中记录的集合或者公共记录的集合,又或者其中某张表中的记录的集合。像这样用来进行集合运算的运算符称为集合运算符

  • 表的加法——UNION(并集)

    -- 使用UNION对表进行加法运算
    SELECT product_id,product_name
    FROM Product
    UNION
    SELECT product_id,product_name
    FROM Product2
    

    UNION等集合运算符通常都会除去重复的记录

  • 集合运算的注意事项

    • 作为运算对象的记录的列数必须相同

    • 作为运算对象的记录中列的类型必须一致

      一定要使用不同数据类型的列时,可以使用类型转换函数CAST

    • 可以使用任何SELECT语句,但ORDER BY子句只能在最后使用一次

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

    如果想在UNION的结果中保留重复行,只需要在UNION后面添加ALL关键字就可以了,这里的ALL选项,在UNION之外的集合运算符中同样可以使用

    在这里插入图片描述

  • 选取表中公共部分——INTERSECT(交集)

    其语法和UNION完全一样

    在这里插入图片描述

    与使用AND可以选取出一张表中满足多个条件的公共部分不同,INTERSECT应用于两张表,选取出它们当中的公共记录

  • 记录的减法——EXCEPT(差集)

    在这里插入图片描述

在这里插入图片描述


注意:MySQL还不支持EXCEPT,因此无法使用



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

在这里插入图片描述


所谓联结运算,一言以蔽之,就是“以A中的列为桥梁,将B中满足同样条件的列汇集到同一结果之中“。


内联结——INNER JOIN

在这里插入图片描述

  • 内联结要点1——FROM子句

    进行联结时需要在FROM子句中使用多张表

  • 内联结要点2——ON子句

    在这里插入图片描述

  • 内联结要点3——SELECT子句

    在这里插入图片描述

  • 内联结和WHERE子句结合使用

    在这里插入图片描述

    在这里插入图片描述


外联结——OUTER JOIN
  • 外联结要点1——选取出单张表中全部的信息

  • 外联结要点2——每张表都是主表吗?

    在外联结中,把哪张表作为主表非常重要,最终的结果会包含主表内所有的数据。指定主表的关键字是LEFT和RIGHT

  • 3张以上的表的联结

    在这里插入图片描述

  • 交叉联结——CROSS JOIN

    对满足相同规则的表进行交叉联结的集合运算符是CROSS JOIN(笛卡尔积)。进行交叉联结时无法使用内联结和外联结中所使用的ON子句,这是因为交叉联结是对两张表中的全部记录进行交叉组合,因此结果中的记录数通常是两张表中行数的乘积

    内联结是交叉联结的一部分,“内”也可以理解为“包含在交叉联结结果中的部分”。相反,外联结的“外”可以理解为“交叉联结结果之外的部分”

    交叉联结没有应用到实际业务之中的原因有两个。一是其结果没有实用价值。二是由于其结果行数太多,需要花费大量的运算时间和高性能设备的支持

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值