MySQL - UNION 與 UNION ALL 的比較

Hello, 未來的數據庫魔法師們!今天,我們將要深入 MySQL 的迷人世界,並探討兩個強大的運算符:UNION 與 UNION ALL。在這個教學的結尾,你將能像專家一樣組合數據!所以,拿起你喜歡的飲料,我們開始吧!

MySQL - UNION vs UNION ALL

MySQL UNION 運算符

UNION 是什麼?

UNION 在 MySQL 中就像一根神奇的魔杖,讓我們能夠組合兩個或多個 SELECT 說明的結果。這就像邀請不同的朋友群體參加一個大型派對 - 每個人都会來,但重複的會被有禮貌地請離開。

UNION 如何工作?

當你使用 UNION 時,它會執行以下步驟:

  1. 執行多個 SELECT 說明
  2. 組合結果
  3. 移除重複的行
  4. 返回最終的唯一行集合

UNION 語法

SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;

UNION 示例

假設我們有兩個表:fruitsvegetables。我們想要創建一個包含所有產品項目的列表。

-- 創建並填充 fruits 表
CREATE TABLE fruits (
id INT PRIMARY KEY,
name VARCHAR(50),
color VARCHAR(20)
);

INSERT INTO fruits (id, name, color) VALUES
(1, 'Apple', 'Red'),
(2, 'Banana', 'Yellow'),
(3, 'Orange', 'Orange'),
(4, 'Grape', 'Purple');

-- 創建並填充 vegetables 表
CREATE TABLE vegetables (
id INT PRIMARY KEY,
name VARCHAR(50),
color VARCHAR(20)
);

INSERT INTO vegetables (id, name, color) VALUES
(1, 'Carrot', 'Orange'),
(2, 'Broccoli', 'Green'),
(3, 'Tomato', 'Red'),
(4, 'Eggplant', 'Purple');

-- 現在,讓我們使用 UNION 來組合 fruits 與 vegetables
SELECT name, color FROM fruits
UNION
SELECT name, color FROM vegetables;

這個查詢將返回:

name color
Apple Red
Banana Yellow
Orange Orange
Grape Purple
Carrot Orange
Broccoli Green
Tomato Red
Eggplant Purple

注意我們只有 8 行而不是 10 行?這是因為 UNION 移除了重複的 'Orange' 與 'Purple' 項目!

MySQL UNION ALL 運算符

UNION ALL 是什麼?

UNION ALL 是 UNION 的更放鬆的親戚。它組合多個 SELECT 說明的結果,但不會麻煩移除重複。這就像舉辦一個派對,每個人都被邀請,而且沒有人會被拒之門外!

UNION ALL 如何工作?

UNION ALL 遵循以下步驟:

  1. 執行多個 SELECT 說明
  2. 組合所有結果,包括重複
  3. 返回最終的行集合(可能包括重複)

UNION ALL 語法

SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2;

UNION ALL 示例

讓我們再次使用我們的 fruits 與 vegetables 表,但這次使用 UNION ALL:

SELECT name, color FROM fruits
UNION ALL
SELECT name, color FROM vegetables;

這個查詢將返回:

name color
Apple Red
Banana Yellow
Orange Orange
Grape Purple
Carrot Orange
Broccoli Green
Tomato Red
Eggplant Purple

現在我們有所有的 10 行,包括重複的顏色!

MySQL UNION 與 MySQL UNION ALL 的比較

現在我們已經看到了 UNION 與 UNION ALL 的實際應用,讓我們將它們並排放置比較:

特性 UNION UNION ALL
移除重複
性能 較慢(由於去重) 較快
記憶體使用 較高 較低
使用案例 當需要唯一結果時 當需要所有結果,包括重複時

當使用 UNION

當你需要組合多個查詢的結果並確保沒有重複時,使用 UNION。它在以下情況中非常有用:

  1. 從不同的數據庫中創建唯一的客戶列表
  2. 組合來自多個表的搜索結果
  3. 生成需要唯一值的報告
-- 示例:找到所有水果和蔬菜的唯一顏色
SELECT color FROM fruits
UNION
SELECT color FROM vegetables;

當使用 UNION ALL

當你想要組合所有結果,包括重複的,或者當你知道不會有重複並且想要更好的性能時,使用 UNION ALL。它在以下情況中非常理想:

  1. 組合來自多個來源的日誌數據
  2. 在重複重要的情況下聚合數據
  3. 合並不重叠數據集的數據
-- 示例:計算所有產品按顏色的總數,包括重複
SELECT color, COUNT(*) as total FROM (
SELECT color FROM fruits
UNION ALL
SELECT color FROM vegetables
) AS all_produce
GROUP BY color;

結論

就这样,我親愛的學生們!我們一起穿越了 UNION 和 UNION ALL 的領地,探索了它們的相似之處和不同之處。記住,UNION 像一個細心的派對主辦者,確保每個人都獨一無二,而 UNION ALL 則是“越多越好”的類型,欢迎所有的客人。

在你繼續你的 MySQL 冒險時,你會發現這些運算符在無數情況中都非常有用。記住:當你需要唯一結果時,選擇 UNION。當你想要全部並且快速時,UNION ALL 是你的朋友。

現在,輪到你練習了!嘗試使用 UNION 和 UNION ALL 組合你數據庫中的不同表。嘗試,犯錯誤,然後從中學習。這是真正掌握這些概念的最好方式。

直到下一次,快樂查詢,願你的 UNION 始終成功!

Credits: Image by storyset