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

MySQL UNION 與 UNION ALL 詳解:多表結果合併實戰

     編輯:MySQL 綜合教學

MySQL UNION 與 UNION ALL 詳解:多表結果合併實戰

UNION 操作符用於將多個 SELECT 查詢的結果集合併為單一結果集,要求各查詢欄位數、順序、類型兼容。MySQL 4.0+ 開始支援。

業務場景

三張表:潛在客戶 prospect、正式客戶 customer、供應商 vendor,需彙總所有人員/公司名稱與地址生成郵寄清單。表結構各異:

prospect(fname, lname, addr)
customer(first_name, last_name, address)
vendor(company, street)

UNION 去重合併

SELECT fname, lname, addr FROM prospect
UNION
SELECT first_name, last_name, address FROM customer
UNION
SELECT company, '', street FROM vendor;

結果(重複的 Bernice Smith 只保留一條):

+-------------------+----------+------------------------+
| fname             | lname    | addr                   |
+-------------------+----------+------------------------+
| Peter             | Jones    | 482 Rush St., Apt. 402 |
| Bernice           | Smith    | 916 Maple Dr.          |
| Grace             | Peterson | 16055 Seminole Ave.    |
| Walter            | Brown    | 8602 1st St.           |
| ReddyParts, Inc.  |          | 38 Industrial Blvd.    |
| Parts-to-go, Ltd. |          | 213B Commerce Park.    |
+-------------------+----------+------------------------+

UNION ALL 保留重複

SELECT fname, lname, addr FROM prospect
UNION ALL
SELECT first_name, last_name, address FROM customer
UNION ALL
SELECT company, '', street FROM vendor;

結果包含重複的 Bernice Smith:

+-------------------+----------+------------------------+
| fname             | lname    | addr                   |
+-------------------+----------+------------------------+
| Peter             | Jones    | 482 Rush St., Apt. 402 |
| Bernice           | Smith    | 916 Maple Dr.          |
| Grace             | Peterson | 16055 Seminole Ave.    |
| Bernice           | Smith    | 916 Maple Dr.          |  <-- 重複
| Walter            | Brown    | 8602 1st St.           |
| ReddyParts, Inc.  |          | 38 Industrial Blvd.    |
| Parts-to-go, Ltd. |          | 213B Commerce Park.    |
+-------------------+----------+------------------------+

效能與選型建議

  • UNION:需排序去重,消耗臨時表與 CPU,適合結果集較小或業務要求去重場景。
  • UNION ALL:直接拼接,無去重開銷,效能顯著優於 UNION,若業務允許重複或已知無重複,優先使用。
  • 各 SELECT 可獨立加 WHERE、LIMIT、ORDER BY(需加括號)。
  • 最終排序需在最外層加 ORDER BY。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved