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运算符。但是,我们可以使用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);
输出:
执行上述查询后,我们应该得到如下图像的输出:
与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);
输出:
在执行上述查询之后,我们应该得到如下图像的输出: