在本教學中,我們將向您介紹SQL INTERSECT
運算子,並展示如何模擬MySQL INTERSECT
運算子(交集)。
INTERSECT
運算子是一個集合運算子,它只返回兩個查詢或更多查詢的交集。
以下說明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
操作符。 但是我們可以模擬INTERSECT
操作符。
我們為演示建立一些範例資料。
USE testdb;
DROP TABLE IF exists t1;
DROP TABLE IF exists 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
表查詢返回行記錄如下 -
mysql> SELECT id FROM t1;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set
以下從t2
表查詢返回行記錄如下 -
mysql> SELECT id FROM t2;
+----+
| id |
+----+
| 2 |
| 3 |
| 4 |
+----+
3 rows in set
使用DISTINCT運算子和INNER JOIN子句模擬MySQL INTERSECT運算子
以下語句使用DISTINCT運算子和INNER JOIN子句來返回兩個表中的相交集合:
SELECT DISTINCT
id
FROM t1
INNER JOIN t2 USING(id);
執行上面查詢語句,得到以下結果 -
+----+
| id |
+----+
| 2 |
| 3 |
+----+
2 rows in set
上面語句是怎麼工作的?
INNER JOIN
子句從左表和右表返回所有符合條件的行記錄。DISTINCT
運算子刪除重複行。使用IN運算子和子查詢模擬MySQL INTERSECT運算子
SELECT DISTINCT
id
FROM
t1
WHERE
id IN (SELECT
id
FROM
t2);
執行以上查詢語句,得到以下結果 -
+----+
| id |
+----+
| 2 |
| 3 |
+----+
2 rows in set
上面查詢語句是如何工作的?
IN
運算子僅選擇第一個結果集中的值。DISTINCT
運算子確保只選擇不同的值。在本教學中,您已經學習了幾種方法來模擬MySQL中的INTERSECT
(交集)運算子。