写点什么

SQL 数据库集合运算

用户头像
正向成长
关注
发布于: 2020 年 11 月 18 日
SQL数据库集合运算

首先,新建两个表格并插入一些数据创建测试数据集:

-- 创建tableA测试数据集CREATE TABLE tableA(	id INTEGER,	name varchar(16));INSERT INTO tableA VALUES (1, 'Pirate');INSERT INTO tableA VALUES (2, 'Monkey');INSERT INTO tableA VALUES (3, 'Ninja');INSERT INTO tableA VALUES (4, 'Spaghetti');
-- 创建tableB测试数据集CREATE TABLE tableB( id INTEGER, name varchar(16));INSERT INTO tableB VALUES (1, 'Rutabaga');INSERT INTO tableB VALUES (2, 'Pirate');INSERT INTO tableB VALUES (3, 'Darth Vade');INSERT INTO tableB VALUES (4, 'Ninja');
-- 创建tableC测试数据集CREATE TABLE tableC( id INTEGER, name varchar(16));INSERT INTO tableC VALUES (1, 'Rutabaga');INSERT INTO tableC VALUES (2, 'Pirate');INSERT INTO tableC VALUES (3, 'Jack');INSERT INTO tableC VALUES (4, 'Nike');
复制代码


表的加减法

并集(UNION)

-- 取并集且去重SELECT name FROM tableA	UNION		SELECT name FROM tableB;-- 取并集且不去重SELECT name FROM tableA	UNION ALL		SELECT name FROM tableB;
复制代码

交集(INTERSECT)

-- 取交集SELECT name FROM tableA	INTERSECT		SELECT name FROM tableB;
复制代码


差集(EXCEPT)

-- 取差集SELECT name FROM tableA	EXCEPT		SELECT name FROM tableB;
复制代码


联结

内联结

返回两个表中符合条件的交集。

SELECT * FROM tableA	INNER JOIN tableB ON tableA.name = tableB.name;
复制代码

外联结

FULL OUTER JOIN

生成两个表的并集,对于没有匹配到的记录填充null

SELECT * FROM tableA	FULL OUTER JOIN tableB ON tableA.name = tableB.name;
复制代码

LEFT OUTER JOIN

生成左侧表得全集,对于右侧表没有匹配到的记录填充null

SELECT * FROM tableA	LEFT OUTER JOIN tableB ON tableA.name = tableB.name;
复制代码


RIGHT OUTER JOIN

生成右侧表得全集,对于左侧表没有匹配到的记录填充null

SELECT * FROM tableA	RIGHT OUTER JOIN tableB ON tableA.name = tableB.name;
复制代码

交叉联结(CROSS JOIN)

对两张表中的全部记录进行交叉组合,因此结果中的记录数通常是两张表中行数的乘积。


SELECT * FROM tableA	CROSS JOIN tableB;
复制代码


假设查找 tableC 中 name,既不存在与 tableA 又不存在于 tableB。

SELECT name FROM tableC	WHERE name NOT IN(		SELECT name FROM tableA			UNION				SELECT name FROM tableB);
复制代码


参考资料

  • https://zhuanlan.zhihu.com/p/59656673

  • 书籍《SQL 基础教程(第 2 版)》

发布于: 2020 年 11 月 18 日阅读数: 599
用户头像

正向成长

关注

正向成长 2018.08.06 加入

想要坚定地做大规模数据处理(流数据方向),希望结合结合批处理的传统处理方式,以及之后流批混合处理方向进行学习和记录。

评论

发布
暂无评论
SQL数据库集合运算