MySQL - UNION 與 UNION ALL



MySQL 中的UNIONUNION ALL 運算子用於從多個表中檢索行並將它們作為單個表返回。

但是,要使這些運算子能夠在這些表上工作,它們需要遵循以下條件:

  • 要組合的表必須具有相同數量的列,並且資料型別相同。
  • 行數不必相同。

MySQL UNION 運算子

MySQL 中的 UNION 運算子的工作原理類似於關係代數中的並集運算子。此運算子組合來自多個聯合兼容表的的資訊。但是,只有表中的不同行會被新增到結果表中,因為 UNION 會自動消除所有重複記錄。

語法

以下是 MySQL 中 UNION 運算子的語法:

SELECT * FROM table1
UNION
SELECT * FROM table2;

MySQL UNION ALL 運算子

UNION ALL 也是 MySQL 中的一個運算子/子句,用於將多個表組合成一個。但是,此運算子還會在結果表中保留重複行。

語法

以下是 MySQL 中 UNION ALL 運算子的語法:

SELECT * FROM table1
UNION ALL
SELECT * FROM table2;

MySQL UNION 與 MySQL UNION ALL

這兩個運算子之間的唯一區別在於,UNION 僅返回不同的行,而 UNION ALL 返回兩個表中存在的所有行。讓我們透過一個示例來理解這一點。

示例

首先,我們需要建立兩個表,它們具有相同數量的列,並且資料型別相同。以下查詢建立了一個名為“COURSES_PICKED”的表:

CREATE TABLE COURSES_PICKED(
   STUDENT_ID INT NOT NULL, 
   STUDENT_NAME VARCHAR(30) NOT NULL, 
   COURSE_NAME VARCHAR(30) NOT NULL
);

以下查詢將值插入到 COURSES_PICKED 表中:

INSERT INTO COURSES_PICKED VALUES
(1, 'JOHN', 'ENGLISH'),
(2, 'ROBERT', 'COMPUTER SCIENCE'),
(3, 'SASHA', 'COMMUNICATIONS'),
(4, 'JULIAN', 'MATHEMATICS');

COURSES_PICKED 表的內容如下:

學生 ID 學生姓名 課程名稱
1 JOHN 英語
2 ROBERT 計算機科學
3 SASHA 傳播學
4 JULIAN 數學

現在,讓我們建立另一個名為 EXTRA_COURSES_PICKED 的表,如下所示:

CREATE TABLE EXTRA_COURSES_PICKED(
   STUDENT_ID INT NOT NULL, 
   STUDENT_NAME VARCHAR(30) NOT NULL, 
   EXTRA_COURSE_NAME VARCHAR(30) NOT NULL
);

以下是將值插入到 EXTRA_COURSES_PICKED 表中的查詢:

INSERT INTO EXTRA_COURSES_PICKED VALUES
(1, 'JOHN', 'PHYSICAL EDUCATION'),
(2, 'ROBERT', 'GYM'),
(3, 'SASHA', 'FILM'),
(4, 'JULIAN', 'MATHEMATICS');

EXTRA_COURSES_PICKED 表的內容如下:

學生 ID 學生姓名 COURSES_PICKED
1 JOHN 體育
2 ROBERT 體操
3 SASHA 傳播學
4 JULIAN 數學

使用 UNION 運算子組合表

現在,讓我們使用以下 UNION 查詢組合這兩個表:

SELECT * FROM COURSES_PICKED
UNION
SELECT * FROM EXTRA_COURSES_PICKED;

輸出

獲得以下輸出:

學生 ID 學生姓名 課程名稱
1 JOHN 英語
2 ROBERT 計算機科學
3 SASHA 傳播學
4 JULIAN 數學
1 JOHN 體育
2 ROBERT 體操

在這裡,“Julian”和“Shasha”選擇的額外課程和課程相同,因此,COURSES_PICKED 和 EXTRA_COURSES_PICKED 中的最後兩條記錄是相同的。當我們使用 UNION 運算子組合這兩個表時,它會排除相同的記錄,並且僅返回不同的記錄。

使用 UNION ALL 運算子組合表

與 UNION 運算子不同,如果我們使用UNION ALL 運算子組合上面建立的表,它會返回兩個表中的所有記錄:

SELECT * FROM COURSES_PICKED
UNION ALL
SELECT * FROM EXTRA_COURSES_PICKED;

輸出

結果表顯示如下:

學生 ID 學生姓名 課程名稱
1 JOHN 英語
2 ROBERT 計算機科學
3 SASHA 傳播學
4 JULIAN 數學
1 JOHN 體育
2 ROBERT 體操
3 SASHA 傳播學
4 JULIAN 數學
廣告

© . All rights reserved.