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

左侧查询生成结果集 (1,2,3)。
正确的查询返回结果集为(2,3,4)。
INTERSECT
运算符返回两个结果集的不同行,其中包括 (2,3)。
与UNION
运算符不同, INTERSECT
运算符返回两个圆之间的交集。
请注意,SQL 标准具有三个集合运算符,包括UNION
、 INTERSECT
和MINUS
。
在 MySQL 中模拟INTERSECT
不幸的是,MySQL 不支持INTERSECT
运算符。但是,您可以模拟INTERSECT
运算符。
设置样本表
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);
Code language: SQL (Structured Query Language) (sql)
以下查询返回t1
表中的行。
SELECT id FROM t1;
Code language: SQL (Structured Query Language) (sql)
id ---- 1 2 3
以下查询返回t2
表中的行:
SELECT id
FROM t2;
Code language: SQL (Structured Query Language) (sql)
id --- 2 3 4
1) 使用DISTINCT
和INNER JOIN
子句模拟INTERSECT
以下语句使用DISTINCT
运算符和INNER JOIN
子句返回两个表中的不同行:
SELECT DISTINCT
id
FROM t1
INNER JOIN t2 USING(id);
Code language: SQL (Structured Query Language) (sql)
id ---- 2 3
怎么运行的。
INNER JOIN
子句返回左表和右表中的行。-
DISTINCT
运算符删除重复的行。
2) 使用IN
和子查询模拟INTERSECT
SELECT DISTINCT id
FROM t1
WHERE id IN (SELECT id FROM t2);
Code language: SQL (Structured Query Language) (sql)
id ---- 2 3
怎么运行的。
- 子查询返回第一个结果集。
- 外部查询使用
IN
运算符仅选择第一个结果集中存在的值。DISTINCT
运算符确保仅选择不同的值。
在本教程中,您学习了几种在 MySQL 中模拟INTERSECT
运算符的方法。
本教程有帮助吗?