📜  MySQL相交

📅  最后修改于: 2020-11-19 04:36:55             🧑  作者: Mango

MySQL的相交

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运算符的查询规则:

  • 所有SELECT语句中的列数和顺序必须相同。
  • 两个SELECT语句中相应列的数据类型必须相同或可转换。

我们可以通过以下视觉表示理解INTERSECT运算符。在这里,此运算符比较两个查询获得的结果,并且仅从两个查询中产生不同的行:

MySQL 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子句的INTERSECT运算符

以下语句使用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和子查询的INTERSECT运算符

以下语法使用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);

输出:

执行完上面的查询后,我们应该得到如下图所示的输出: