萬盛學電腦網

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

MySQL 連接查詢完全指南:LEFT JOIN、RIGHT JOIN 與 INNER JOIN 差異詳解

MySQL 連接查詢核心概念

在 MySQL 中,多表查詢主要分為四大類:內連接、外連接(左/右)、交叉連接與全連接。本文將透過實際數據範例,深入解析左外連接、右外連接與內連接的運作機制與差異,幫助你精準掌握多表查詢技巧。

測試環境與基礎數據

建立兩張測試表 t1 與 t2,數據如下:

-- 表 t1
ID | NAME
---|-----
1  | aaa
2  | bbb

-- 表 t2
ID | AGE
---|----
1  | 20
3  | 30

左外連接 (LEFT JOIN / LEFT OUTER JOIN)

語法: SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id;

結果:

ID | NAME | ID | AGE
---|------|----|----
1  | aaa  | 1  | 20
2  | bbb  | NULL | NULL

解析: 以左表(t1)為基準,左表所有行全部顯示。右表中與左表 ID 匹配的行「拼接」上去;若無匹配(如 t1 的 ID=2),右表欄位顯示 NULL。

右外連接 (RIGHT JOIN / RIGHT OUTER JOIN)

語法: SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id;

結果:

ID | NAME | ID | AGE
---|------|----|----
1  | aaa  | 1  | 20
NULL | NULL | 3  | 30

解析: 以右表(t2)為基準,右表所有行全部顯示。左表無匹配行(如 t2 的 ID=3)則顯示 NULL。運作邏輯與左外連接完全相反。

內連接 (INNER JOIN / 等值連接)

語法: SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id;

結果:

ID | NAME | ID | AGE
---|------|----|----
1  | aaa  | 1  | 20

解析: 僅返回兩表中連接條件(t1.id = t2.id)同時滿足的行。等價於舊式寫法:SELECT * FROM t1, t2 WHERE t1.id = t2.id。內連接不會保留無匹配的行。

補充:連接類型完整對照表

連接類型關鍵字返回結果特徵
內連接INNER JOIN僅返回雙方匹配的行
左外連接LEFT [OUTER] JOIN左表全量 + 右表匹配行(無匹配則 NULL)
右外連接RIGHT [OUTER] JOIN右表全量 + 左表匹配行(無匹配則 NULL)
全外連接FULL [OUTER] JOIN雙表全量,無匹配處填 NULL(MySQL 不直接支援,可用 UNION 模擬)
交叉連接CROSS JOIN笛卡爾積:左表每行與右表每行組合

實戰建議

  • 需「主表全保留、附表匹配多少顯示多少」→ 用 LEFT JOIN(最常用)。
  • 需「雙向全保留」→ 用 LEFT JOIN UNION RIGHT JOIN 模擬 FULL JOIN。
  • 僅需雙方都存在的數據 → 用 INNER JOIN,效能最佳。
  • 避免在大表上使用 CROSS JOIN,會產生海量中間結果。
copyright © 萬盛學電腦網 all rights reserved