第四章 集合运算
4.1 表的加减法
4.1.1 什么是集合运算
在标准SQL中,我们用UNION,INTERSECT,EXCEPT来将检索结果进行并、交和差运算,像 UNION,INTERSECT,EXCEPT这种用来进行集合运算的运算符称为集合运算符。
下面的文氏图展示了几种集合的基本运算:
正在上传…重新上传取消
A ∪ B : A和B的并集
A ∩ B : A和B的交集
A – B : A相对B的差集 即 A - (A ∩ B)
A⊕B :集合A、B的对称差集 即: A ∪ B 再去除A ∩ B
~A:集合A在集合B中的补集
在数据库中,所有的表以及查询结果 都可以视为集合,因此也可以把表视为 在集合上进行上述的集合运算。在很多时候,这种抽象非常有助于对复杂查询问题给出一个可行的思路。
4.1.2 表的加法 – UNION(加法 -- 就是并集 )
4.1.2.1 UNION
演示:
SELECT product_id, product_name
FROM product
UNION
SELECT product_id, product_name
FROM product2;
Out:
product_id|product_name|
----------+------------+
0001 |T恤衫 |
0002 |打孔器 |
0003 |运动T恤 |
0004 |菜刀 |
0005 |高压锅 |
0006 |叉子 |
0007 |擦菜板 |
0008 |圆珠笔 |
0009 |水壶 |
0010 |手套 |
观察发现 商品编号为“0001”~“0003”的3条记录在两个表中都存在,实际情况下UNION等集合运算符通常都会 去除(DISTINCT) 重复的记录。
上述查询是对不同的两张表进行求 并集 运算。对于同一张表,实际上也是可以进行求并集的。
练习:
假设连锁店想要增加成本利润率超过50%或者售价低于800的货物的存货量,请使用 UNION 对分别满足上述两个条件的商品的查询结果求并集。
结果应该类似于:
正在上传…重新上传取消
Input:
select product_id ,product_name,product_type ,sale_price ,purchase_price
from product
where (sale_price - purchase_price)/purchase_price > 0.5
union
select product_id ,product_name,product_type ,sale_price ,purchase_price
from product
where sale_price < 800;
不使用 UNION 完成上述操作&#