介紹如何使用 MySQL/MariaDB 資料庫的 UNION
結合多個查詢結果,並自動刪除重複的資料。
建立示範用資料
在說明 UNION
的用法之前,我們先建立兩張示範用的資料表,第一張 engineers
資料表用來儲存工程師的人員資料:
-- 建立 engineers 資料表 CREATE TABLE engineers ( id INT NOT NULL AUTO_INCREMENT, -- 序號,整數、非空、自動遞增 name VARCHAR(255), -- 名字,可變長度的文字 PRIMARY KEY (id) -- 主鍵 ); -- 插入多筆資料至 engineers 資料表 INSERT INTO engineers (name) VALUES ("Bond"), ("Cole"), ("Dana"); -- 查看 engineers 資料表內所有資料 SELECT * FROM engineers;
+----+------+ | id | name | +----+------+ | 1 | Bond | | 2 | Cole | | 3 | Dana | +----+------+
第二張 salespeople
資料表用來儲存銷售員的人員資料:
-- 建立 salespeople 資料表 CREATE TABLE salespeople ( id INT NOT NULL AUTO_INCREMENT, -- 序號,整數、非空、自動遞增 name VARCHAR(255), -- 名字,可變長度的文字 PRIMARY KEY (id) -- 主鍵 ); -- 插入多筆資料至 salespeople 資料表 INSERT INTO salespeople (name) VALUES ("Cole"), ("Dana"), ("Lily"); -- 查看 salespeople 資料表內所有資料 SELECT * FROM salespeople;
+----+------+ | id | name | +----+------+ | 1 | Cole | | 2 | Dana | | 3 | Lily | +----+------+
UNION 結合資料表
UNION
可以合併多個 SELECT
查詢結果,並自動刪除重複的資料:
-- 合併 engineers 與 salespeople 的 name 資料 (SELECT name FROM engineers) UNION (SELECT name FROM salespeople);
+------+ | name | +------+ | Bond | | Cole | | Dana | | Lily | +------+
UNION
會自動將重複的資料刪除,若要保留重複的資料,可以改用 UNION ALL
:
-- 合併 engineers 與 salespeople 的 name 資料(保留重複資料) (SELECT name FROM engineers) UNION ALL (SELECT name FROM salespeople);
+------+ | name | +------+ | Bond | | Cole | | Dana | | Cole | | Dana | | Lily | +------+
若是查詢的結果包含多個欄位,則會比對每一欄位的資料,只有完全一樣的資料列才會被刪除:
-- 合併多欄位的查詢結果 (SELECT * FROM engineers) UNION (SELECT * FROM salespeople);
+----+------+ | id | name | +----+------+ | 1 | Bond | | 2 | Cole | | 3 | Dana | | 1 | Cole | | 2 | Dana | | 3 | Lily | +----+------+