📅  最后修改于: 2020-11-19 04:36:55             🧑  作者: Mango
INTERSECT运算符是SQL中的一种SET操作,包括UNION,UNION ALL,MINUS和INTERSECT。 INTERSECT运算符从两个或多个表中返回两组或公共记录中的不同(公共)元素。换句话说,它比较两个查询获得的结果并产生唯一的行,这是两个查询返回的结果。
以下是说明INTERSECT运算符用法的语法:
SELECT column_lists FROM table_name WHERE condition
INTERSECT
SELECT column_lists FROM table_name WHERE condition;
注意:MySQL不提供对INTERSECT运算符的支持。本文向我们展示了如何使用JOIN和IN子句在MySQL中模拟INTERSECT查询。
以下是使用INTERSECT运算符的查询规则:
我们可以通过以下视觉表示理解INTERSECT运算符。在这里,此运算符比较两个查询获得的结果,并且仅从两个查询中产生不同的行:
由于MySQL不提供对INTERSECT运算符的支持。但是,我们可以使用INNER JOIN和IN子句来模拟此运算符。
让我们首先创建两个具有以下结构的表,以了解INTERSECT运算符:
表1的结构和数据:
mysql> CREATE TABLE tab1 (
Id INT PRIMARY KEY
);
mysql> INSERT INTO tab1 VALUES (1), (2), (3), (4);
表2的结构和数据:
mysql> CREATE TABLE tab2 (
id INT PRIMARY KEY
);
mysql> INSERT INTO tab2 VALUES (3), (4), (5), (6);
以下语句使用DISTINCT运算符和INNER JOIN子句从两个表中返回不同的行:
mysql> SELECT DISTINCT column_list FROM table_name1
INNER JOIN table_name2 USING(join_condtion);
例:
mysql> SELECT DISTINCT Id FROM tab1
INNER JOIN tab2 USING (Id);
输出:
执行完上面的查询后,我们应该得到如下图所示的输出:
以下语法使用IN和Subquery子句从两个表中返回不同的行:
mysql> SELECT DISTINCT column_list FROM table_name1
WHERE column_name IN (SELECT column_list FROM table_name2);
例:
mysql> SELECT DISTINCT Id FROM tab1
WHERE Id IN (SELECT Id FROM tab2);
输出:
执行完上面的查询后,我们应该得到如下图所示的输出: