MySQL相交
总结:在本教程中,我们将向您介绍 INTERSECT 运算符并展示如何模拟 MySQL INTERSECT 运算符。
请注意,MySQL 不支持该 INTERSECT 运算符。本教程向您介绍如何 INTERSECT 使用连接子句模拟MySQL 中的运算符。
INTERSECT 运算符介绍
该 INTERSECT 运算符是一组操作员只返回两个查询或多个查询的不同行。
下面说明了 INTERSECT 运算符的语法。
(SELECT column_list
FROM table_1)
INTERSECT
(SELECT column_list
FROM table_2);
该 INTERSECT 运算符比较两个查询的结果集,并返回两个查询输出的不同行。
要将 INTERSECT 运算符用于两个查询,请遵循以下规则:
- 查询的选择列表中的顺序和列数必须相同。
- 对应列的数据类型必须兼容。
下图说明了 INTERSECT 运算符。

左侧查询产生的结果集为 (1,2,3)。
正确的查询返回 (2,3,4) 的结果集。
该 INTERSECT 运算符返回两个结果集的不同行,其中包括 (2,3)。
与 UNION 运算符不同,运算 INTERSECT 符返回两个圆之间的交点。
需要注意的是SQL标准有三个集合运算符,其中包括 UNION , INTERSECT ,和 MINUS 。
INTERSECT 在 MySQL 中模拟
不幸的是,MySQL 不支持该 INTERSECT 运算符。但是,您可以模拟 INTERSECT 操作员。
设置实例表
以下语句创建表 t1 和 t2 ,然后将数据插入到两个表中。
CREATE TABLE t1 (
id INT PRIMARY KEY
);
CREATE TABLE t2 LIKE t1;
INSERT INTO t1(id) VALUES(1),(2),(3);
INSERT INTO t2(id) VALUES(2),(3),(4);
以下查询从 t1 表中返回行。
SELECT id FROM t1;
ID —- 1 2 3
以下查询返回表中的行 t2 :
SELECT id
FROM t2;
ID — 2 3 4
1) 模拟 INTERSECT using DISTINCT and INNER JOIN 子句
以下语句使用 DISTINCT 运算符和 INNER JOIN 子句返回两个表中的不同行:
SELECT DISTINCT
id
FROM t1
INNER JOIN t2 USING(id);
ID —- 2 3
这个怎么运作。
- 该
INNER JOIN子句从左表和右表返回行。 - 该
DISTINCT操作将删除重复的行。
2)模拟 INTERSECT 使用 IN 和子查询
SELECT DISTINCT id
FROM t1
WHERE id IN (SELECT id FROM t2);
ID —- 2 3
这个怎么运作。
- 子查询返回第一个结果集。
- 外部查询使用
IN运算符仅选择第一个结果集中存在的值。的DISTINCT操作者可确保只有不同的值被选择。
在本教程中,您学习了几种 INTERSECT 在 MySQL 中模拟运算符的方法。