MySQL INTERSECT运算

INTERSECT 运算符是 SQL 中的一种 SET 操作,包括 UNION、UNION ALL、MINUS 和 INTERSECT。INTERSECT 运算符返回两个集合中的不同(公共)元素或来自两个或多个表的公共记录。换句话说,它比较两个查询获得的结果并产生唯一的行,这是两个查询返回的结果。

一、MySQL 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 JOININ 子句来模拟此运算符。

让我们首先创建两个具有以下结构的表来理解 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);  

1)使用 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);  

输出结果为:

2)使用 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);  

输出结果为:

热门文章

优秀文章