首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL UNION 操作符完整指南:合併查詢結果與去重邏輯

     編輯:SQL 基礎

SQL UNION 操作符完整指南


UNION 將兩個或多個 SELECT 的結果集合併,預設移除重複列。各 SELECT 必須具備相同欄位數、相容資料類型、相同欄位順序。


基本語法

UNION(去重)

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

UNION ALL(保留重複)

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

注意:結果集欄位名稱以第一個 SELECT 為準。


演示資料庫:RUNOOB 範例資料

Websites 表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow| https://stackoverflow.com/ | 0     | IND     |
+----+--------------+---------------------------+-------+---------+

apps 表

+----+------------+-------------------------+---------+
| id | app_name   | url                     | country |
+----+------------+-------------------------+---------+
| 1  | QQ APP     | https://im.qq.com/       | CN      |
| 2  | 微博 APP   | https://weibo.com/       | CN      |
| 3  | 淘寶 APP   | https://www.taobao.com/ | CN      |
+----+------------+-------------------------+---------+

實戰範例

範例 1:UNION 取得不重複的國家清單

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

輸出結果(去重後):

解析:Websites 有 USA、CN、IND;apps 全為 CN。UNION 合併後僅保留 USA、CN、IND 三個唯一值。

範例 2:UNION ALL 保留所有國家(含重複)

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;

輸出結果:

此時 CN 出現多次,反映兩表資料分布。

範例 3:UNION ALL 搭配 WHERE 篩選中國資料

SELECT country, name FROM Websites
WHERE country = 'CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country = 'CN'
ORDER BY country;

輸出結果:


效能與最佳實務

  • UNION 較慢:需排序去重,大資料量時效能顯著低於 UNION ALL。
  • 確知無重複時:務必用 UNION ALL 避免不必要排序。
  • 欄位對齊:若兩表欄位名稱不同,用 AS 統一別名;類型不同時需 CAST 轉換。
  • ORDER BY 位置:只能放在最後一個 SELECT 之後,作用於整個合併結果。

適用場景

  • 多來源資料整合(如不同分庫、歷史表與當前表)。
  • 建立統一視圖供報表查詢。
  • 資料清洗時比對新舊資料差異。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved