MySQL INTERSECT运算符
简介:在本教程中,我们将向您介绍INTERSECT运算符并向您展示如何模拟MySQL INTERSECT运算符。
请注意,MySQL不支持INTERSECT运算符。
本教程向您介绍如何使用join子句在MySQL中模拟INTERSECT运算符。
INTERSECT运算符简介
INTERSECT运算符是一个set运算符,它仅返回两个或更多查询的不同行。
下面说明了INTERSECT运算符的语法。
(SELECT column_list FROM table_1) INTERSECT (SELECT column_list FROM table_2);
INTERSECT运算符比较两个查询的结果集,并返回两个查询输出的不同行。
要将INTERSECT运算符用于两个查询,请遵循以下规则:
查询的选择列表中的顺序和列数必须相同。
相应列的数据类型必须兼容。
下图说明了INTERSECT运算符。
左查询产生的结果集为(1,2,3)。
正确的查询返回结果集(2,3,4)。
INTERSECT运算符返回两个结果集的不同行,其中包括(2,3)。
与UNION运算符不同,INTERSECT运算符返回两个圆之间的交点。
请注意,SQL标准具有三个集合运算符,包括UNION,INTERSECT和MINUS。
在MySQL中模拟INTERSECT
不幸的是,MySQL不支持INTERSECT运算符。
但是,您可以模拟INTERSECT运算符。
设置样本表
以下语句创建表t1和t2,然后将数据插入两个表中。
CREATE TABLE t1 ( id INT PRIMARY KEY ); CREATE TABLE t2 LIKE t1; INSERT INTO t1(id) VALUES(1),(2),(3); INSERT INTO t2(id) VALUES(2),(3),(4);
以下查询返回t1表中的行。
SELECT id FROM t1;
id ---- 1 2 3
以下查询返回t2表中的行:
SELECT id FROM t2;
id --- 2 3 4
1)使用DISTINCT和INNER JOIN子句模拟INTERSECT
以下语句使用DISTINCT运算符和INNER JOIN子句返回两个表中的不同行:
SELECT DISTINCT id FROM t1 INNER JOIN t2 USING(id);
id ---- 2 3
这个怎么运作。
INNER JOIN子句从左表和右表返回行。
DISTINCT运算符删除重复的行。
2)使用IN和子查询模拟INTERSECT
以下语句使用IN运算符和一个子查询返回两个结果集的交集。
SELECT DISTINCT id FROM t1 WHERE id IN (SELECT id FROM t2);
id ---- 2 3
这个怎么运作。
子查询返回第一个结果集。
外部查询使用IN运算符选择仅在第一个结果集中存在的值。
DISTINCT运算符可确保仅选择不同的值。
在本教程中,您学习了几种在MySQL中模拟INTERSECT运算符的方法。