Mysql 表的加减法

表的加减法

抛弃时间的人,时间也抛弃他。——莎士比亚

表的加减法

学习重点

  • 集合运算就是对满足同一规则的记录进行的加减等四则运算

  • 使用 UNION(并集),INTERSECT(交集),EXCEPT(差集)等集合运算符来进行集合运算

  • 集合运算可以去除重复行

  • 如果希望集合运算符保留重复行,就需要使用 ALL 选项

什么是集合运算

  • 集合运算就是对满足同一规则的记录进行的加减等四则运算.

  • 通过集合运算,可以得到两张表中记录的集合或者公共记录的集合

集合运算的注意事项

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

如果一部分包含 2 列,另一部分包含 3 列就会发生错误,无法进行加法运算


SELECT product_id,product_name FROM Product UNION SELECT product_id,product_name,sale_price FROM Product2
  • 作为运算对象的记录中列的类型必须一致

从左侧开始,相同位置上的列必须是同一数据类型.例如下面的 SQL 语句.虽然列数相同,但是第 2 列的数据类型并不一致(一个数值类型,一个是日期类型),所以会发生错误


SELECT product_id, sale_price
FROM Product
UNION
SELECT product_id, regist_date
FROM Product2;

列数 类型 必须一致

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

SELECT product_id,product_name FROM Product WHERE product_type='厨房用具' UNION SELECT product_id,product_name FROM Product2 WHERE product_type='厨房用具' ORDER BY product_id;

表的加法(并集)

  • 两张表的结果合并在一起

  • 实例


SELECT product_id,product_name FROM Product UNION SELECT product_id,product_name FROM Product2;

比如两个表中有重复的元素,UNION 会除去重复的记录

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

  • 语法保留重复行 UNION ALL

SELECT product_id, product_name
FROM Product
UNION ALL
SELECT product_id, product_name
FROM Product2;

这样的 Product 和 Product2 里面的重复行就都会出来

在集合运算符中使用 ALL ,可以保留重复行

表的交集

  • INTERSECT (用法同 UNION 一样)

SELECT product_id, product_name
FROM Product
INTERSECT
SELECT product_id, product_name
FROM Product2
ORDER BY product_id;

求表的交集,选取出公共记录,当然希望保留重复行时同样需要使用 INTERSECT ALL

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

  • EXCEPT (其语法与 UNION)相同

SELECT product_id, product_name
FROM Product
EXCEPT
SELECT product_id, product_name
FROM Product2
ORDER BY product_id;

它的意思就是从 Product 中除去和 Product2 相同的部分

特别注意的就是

减法的位置写的不一样,结果也不一样 4-2 和 2-4 结果不一样


文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录