首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL数据库集合运算

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

代码语言:javascript
复制

-- 创建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)

代码语言:javascript
复制

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

交集(INTERSECT)

代码语言:javascript
复制

-- 取交集
SELECT name FROM tableA
	INTERSECT
		SELECT name FROM tableB;

差集(EXCEPT)

代码语言:javascript
复制

-- 取差集
SELECT name FROM tableA
	EXCEPT
		SELECT name FROM tableB;

联结

内联结

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

代码语言:javascript
复制

SELECT * FROM tableA
	INNER JOIN tableB ON tableA.name = tableB.name;

外联结

FULL OUTER JOIN

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

代码语言:javascript
复制

SELECT * FROM tableA
	FULL OUTER JOIN tableB ON tableA.name = tableB.name;

LEFT OUTER JOIN

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

代码语言:javascript
复制

SELECT * FROM tableA
	LEFT OUTER JOIN tableB ON tableA.name = tableB.name;

RIGHT OUTER JOIN

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

代码语言:javascript
复制

SELECT * FROM tableA
	RIGHT OUTER JOIN tableB ON tableA.name = tableB.name;

交叉联结(CROSS JOIN)

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

代码语言:javascript
复制

SELECT * FROM tableA
	CROSS JOIN tableB;

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

代码语言:javascript
复制

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版)》
  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/d8df072090daea9b36e392a6d
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券