首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 兩表合併查詢:JOIN 關聯合併 vs UNION 縱向合併,按業務場景選擇

     編輯:程式設計綜合問答

問題:兩張表欄位不同,想合併查詢。

場景一:橫向關聯 (一對一/多對一) → `JOIN`


-- 例:訂單表 orders + 用戶表 users
SELECT o.id, o.amount, u.name, u.email
FROM orders o
JOIN users u ON o.user_id = u.id;
  • 結果欄位 = 兩表欄位並集。
  • 需有關聯鍵 (FK/PK)。

場景二:縱向堆疊 (同結構/兼容結構) → `UNION [ALL]`


-- 例:2023 年訂單 + 2024 年訂單 (結構相同)
SELECT id, user_id, amount, created_at FROM orders_2023
UNION ALL
SELECT id, user_id, amount, created_at FROM orders_2024;
  • `UNION` 去重 (較慢);`UNION ALL` 保留重複 (極快,推薦)。
  • **欄位數、順序、型別必須一致** (可用 `CAST` 對齊)。

場景三:全外連接 (MySQL 不支援 `FULL JOIN`) → `LEFT JOIN UNION RIGHT JOIN`


SELECT * FROM a LEFT JOIN b ON a.id = b.aid
UNION
SELECT * FROM a RIGHT JOIN b ON a.id = b.aid;

決策流程圖

  1. 兩表有業務關聯鍵? → 是 → `JOIN` (INNER/LEFT/RIGHT)。
  2. 無關聯鍵,但結構相同/兼容? → `UNION ALL`。
  3. 無關聯鍵,結構不同,需橫向拼接? → **不可直接 SQL 合併**,需應用層組裝或重設計模型。

核心:**先搞清業務關係,再選 SQL 關鍵字。**

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