本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql
关系数据库中使用集合运算,可以对表进行上下拼接和join拼接,使用不同的SQL语言能够达到不同的拼接效果,从而满足实际业务中对于数据的需要。
1 上下拼接--表的加减法
1.1 加运算
--表的上下拼接
SELECT <列名1>, <列名2>,...
FROM <表名>
WHERE <条件1>
UNION
SELECT <列名1>, <列名2>,...
FROM <表名>
WHERE <条件2>;
--等价语句
SELECT <列名1>, <列名2>,...
FROM <表名>
WHERE <条件1> OR <条件2>;
UNION 等集合运算符通常都会除去重复的记录,如同图7-1所示的两个集合求并集。
UNION查询可以对不同的两张表进行求并集运算. 对于同一张表, 实际上也是可以进行求并集的.
对于同一个表的两个不同的筛选结果集, 使用 UNION 对两个结果集取并集, 和把两个子查询的筛选条件用 OR 谓词连接, 会得到相同的结果, 但倘若要将两个不同的表中的结果合并在一起, 就不得不使用 UNION 了.
而且, 即便是对于同一张表, 有时也会出于查询效率方面的因素来使用 UNION.
1.2 差运算
--同一个表的差运算,使用NOT IN和嵌套子查询
SELECT *
FROM product
WHERE sale_price > 2000
AND product_id NOT IN (SELECT product_id
FROM product
WHERE sale_price<1.3*purchase_price)
1.3 对称差
两个集合A,B的对称差是指那些仅属于A或仅属于B的元素构成的集合。
-- 使用 NOT IN 实现两个表的差集
SELECT *
FROM product
WHERE product_id NOT IN (SELECT product_id FROM product2)
UNION
SELECT *
FROM product2
WHERE product_id NOT IN (SELECT product_id FROM product)
2 JOIN 连接
-- 内连结两表
SELECT <列名>
FROM <tb_1>
INNER JOIN <tb_2>
ON <condition(s)>;
--内连接三表
SELECT <列名>
FROM <tb_1>
INNER JOIN <tb_2>
ON <condition(s)>
INNER JOIN <tb_2>
ON <condition(s)>;
-- 左连结
FROM <tb_1> LEFT OUTER JOIN <tb_2> ON <condition(s)>
-- 右连结
FROM <tb_1> RIGHT OUTER JOIN <tb_2> ON <condition(s)>
-- 全外连结
FROM <tb_1> FULL OUTER JOIN <tb_2> ON <condition(s)>