目录
1 表的加减法
- 集合:在数据库领域表示记录的集合,具体来说,表、视图和查询的执行结果都是记录的集合。
- 集合运算:是对满足同一规则的记录进行的加减等四则运算。几种集合运算的文氏图:
1.1 表的加法-UNION
- UNION的用法:相当于并集运算
【例子】包含两张表的全部商品SELECT product_id, product_name FROM product UNION SELECT product_id, product_name FROM product2;
注意: UNION 等集合运算符通常都会除去重复的记录,即UNION 会对两个查询的结果集进行合并和去重.
- UNION 与 OR 谓词:使用
UNION
对两个查询结果取并集, 和在一个查询中使用WHERE
子句, 然后使用OR
谓词连接两个查询条件, 能够得到相同的结果。对于将不同的两张表合并在一起,只能使用UNION
。
【例子】UNION 与 OR 谓词相同的结果# 使用 OR 谓词 SELECT * FROM product WHERE sale_price / purchase_price < 1.3 OR sale_price / purchase_price IS NULL; # 使用 UNION SELECT * FROM product WHERE sale_price / purchase_price < 1.3 UNION SELECT * FROM product WHERE sale_price / purchase_price IS NULL;
- 集合运算的注意事项:
- 1.作为运算对象的记录的列数必须相同
【例子】一部分记录包含 2 列,另一部分记录包含 3 列时会发生错误,无法进行加法运算。
-- 列数不一致时会发生错误 SELECT product_id, product_name FROM Product UNION SELECT product_id, product_name, sale_price FROM Product2;
- 2.作为运算对象的记录中列的类型必须一致(相同位置上的列必须是同一数据类型)
【例子】列数相同,但是第 2 列的数据类型并不一致,(一个是数值类型,一个是日期类型型),会发生错误。
-- 数据类型不一致时会发生错误 SELECT product_id, sale_price FROM Product UNION SELECT product_id, regist_date FROM Product2;
- 3.可以使用任何SELECT语句,但ORDER BY子句只能在最后使用一次
通过UNION
进行并集运算时可以使用任何形式的SELECT
语句,WHERE、GROUP BY、HAVING
等子句都可以使用
【例子】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;
product_id | product_name ----------+-------------- 0004 | 菜刀 0005 | 高压锅 0006 | 叉子 0007 | 擦菜板 0010 | 水壶
- 1.作为运算对象的记录的列数必须相同
- ALL选项:在 UNION 的结果中保留重复行,得到不去重的并集。
- 语法: 只需要在
UNION
后面添加ALL
关键字就可以了。
【例子】包含两张表的全部商品并保留重复商品
# 保留重复行 SELECT product_id, product_name FROM product UNION ALL SELECT product_id, product_name FROM product2;
product
- 语法: 只需要在