萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

SQL JOIN 完全圖解:INNER、LEFT、RIGHT、FULL OUTER JOIN 語法與語義對照

四大 JOIN 類型語法、語義、結果集差異一覽,附 Venn 圖邏輯與效能提示。

1. INNER JOIN (內連接)

SELECT * FROM t1 INNER JOIN t2 ON t1.userid = t2.userid;
-- 等價舊寫法:SELECT * FROM t1, t2 WHERE t1.userid = t2.userid

語義:僅回傳兩表鍵值同時存在的行 (交集)。
效能:通常最優,優化器可自由調整驅動表順序。

2. LEFT OUTER JOIN (左外連接)

SELECT * FROM t1 LEFT OUTER JOIN t2 ON t1.userid = t2.userid;

語義:保留 左表 (t1) 所有行,右表匹配行填入,無匹配則 NULL 填充。
應用:主表帶從表屬性 (如訂單+商品明細,保留無明細訂單)。

3. RIGHT OUTER JOIN (右外連接)

SELECT * FROM t1 RIGHT OUTER JOIN t2 ON t1.userid = t2.userid;

語義:保留 右表 (t2) 所有行,左表無匹配則 NULL。
等價:t1 RIGHT JOIN t2 ≡ t2 LEFT JOIN t1,建議統一用 LEFT JOIN 降低認知負荷。

4. FULL OUTER JOIN (全外連接)

SELECT * FROM t1 FULL OUTER JOIN t2 ON t1.userid = t2.userid;

語義:兩表所有行皆保留,匹配合併,無匹配雙邊 NULL 填充 (聯集)。
注意:MySQL 不支援FULL OUTER JOIN,需用 UNION 模擬:

SELECT * FROM t1 LEFT JOIN t2 ON t1.userid = t2.userid
UNION
SELECT * FROM t1 RIGHT JOIN t2 ON t1.userid = t2.userid;

效能與最佳實踐

  • 優先用 INNER JOIN,結果集最小。
  • 外連接駕駛表 (保留端) 應為較小結果集,減少 NULL 填充開銷。
  • ON 條件放連接鍵,WHERE 放業務篩選,語義清晰且利於下推。
  • 避免在 ON 條件使用函數/運算導致索引失效。

Venn 圖速記

  • 🔵 INNER = 交集
  • 🔵 LEFT = 左圓完整 + 交集
  • 🔵 RIGHT = 右圓完整 + 交集
  • 🔵 FULL = 兩圓完整聯集
copyright © 萬盛學電腦網 all rights reserved