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

SQL UNION 與 UNION ALL 差異詳解:合併查詢結果的核心技巧

     編輯:關於SqlServer

UNION 與 UNION ALL 都是將多個 SELECT 結果集垂直合併的集合運算子,但兩者在「重複資料處理」與「效能」上有本質差異。本文以實戰範例釐清觀念。

一、語法規則速查

  • 每個 SELECT 的 欄位數量、順序、資料型別必須相容。
  • 結果集欄位名稱以第一個 SELECT 為準。
  • ORDER BY 僅能放在最後一個 SELECT 之後,並參考第一個 SELECT 的欄位別名或序號。

二、範例資料

Store_Info(實體店銷售)與 Internet_Sales(網路銷售)皆含 Date、Sales 兩欄。

三、UNION:自動去重

SELECT Date FROM Store_Info
UNION
SELECT Date FROM Internet_Sales;

結果:僅保留不重複的日期。資料庫內部會執行 DISTINCT 排序去重,資料量大時效能較差。

四、UNION ALL:保留所有列(含重複)

SELECT Date FROM Store_Info
UNION ALL
SELECT Date FROM Internet_Sales;

結果:直接合併兩張表的所有列,若同一天兩通路都有銷售,該日期會出現兩次。無排序去重動作,效能顯著優於 UNION。

五、多欄位合併範例

SELECT Date, Sales FROM Store_Info
UNION ALL
SELECT Date, Sales FROM Internet_Sales;

同樣保留所有明細列,適合後續彙總分析(如 GROUP BY Date SUM(Sales))。

六、實務選擇指南

場景建議運算子理由
需唯一值清單(如下拉選單來源)UNION自動去重
ETL 階段合併分區表/日誌表UNION ALL避免昂貴排序,保留完整明細
後續仍要 GROUP BY 聚合UNION ALL重複列不影響聚合結果,省去去重成本

掌握 UNION 與 UNION ALL 的差異,能讓你在撰寫報表與 ETL SQL 時,兼顧正確性與執行效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved