表的加减法
抛弃时间的人,时间也抛弃他。——莎士比亚
表的加减法
学习重点
集合运算就是对满足同一规则的记录进行的加减等四则运算
使用 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 结果不一样