MySQL INTERSECT操作符

MySQL INTERSECT操作符

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运算符

由于MySQL不支持INTERSECT运算符。但是,我们可以使用INNER JOIN和IN子句来模拟这个运算符。

让我们首先创建具有以下结构的两个表来理解INTERSECT运算符:

Table1结构和数据:

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);

输出:

执行上述查询后,我们应该得到如下图像的输出:

MySQL INTERSECT操作符

与IN和子查询一起使用的INTERSECT运算符

以下语法使用IN和子查询子句来返回两个表中的不重复行:

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);

输出:

在执行上述查询之后,我们应该得到如下图像的输出:

MySQL INTERSECT操作符

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程