在本教學中,我們將向您介紹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標準有三個集合運算符,包括UNION,INTERSECT
和MINUS。
2. MySQL INTERSECT模擬
不幸的是,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
(交集)運算符。
上一篇:
MySQL WHERE語句
下一篇:
MySQL插入數據