MySQL交集INTERSECT運算符

在本教學中,我們將向您介紹SQL INTERSECT運算符,並展示如何模擬MySQL INTERSECT運算符(交集)。

1. SQL 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標準有三個集合運算符,包括UNIONINTERSECTMINUS

2. MySQL INTERSECT模擬

不幸的是,MySQL不支持INTERSECT操作符。 但是我們可以模擬INTERSECT操作符。

我們為演示創建一些示例數據。

以下語句創建t1t2,然後將數據插入到兩個表中。

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

以下語句使用IN運算符子查詢返回兩個結果集的交集。

SELECT DISTINCT
    id
FROM
    t1
WHERE
    id IN (SELECT
            id
        FROM
            t2);

執行以上查詢語句,得到以下結果 -

+----+
| id |
+----+
|  2 |
|  3 |
+----+
2 rows in set

上面查詢語句是如何工作的?

  • 子查詢返回第一個結果集。
  • 外部查詢使用IN運算符僅選擇第一個結果集中的值。DISTINCT運算符確保只選擇不同的值。

在本教學中,您已經學習了幾種方法來模擬MySQL中的INTERSECT(交集)運算符。


上一篇: MySQL WHERE語句 下一篇: MySQL插入數據