萬盛學電腦網

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

MySQL LEFT JOIN / RIGHT JOIN 深度解析:語法、類型與實戰技巧

JOIN 四大類型速覽

  1. 內聯結:僅返回兩表關聯欄位均符合條件的行。
  2. 外聯結:分 LEFT JOIN(保留左表所有行)與 RIGHT JOIN(保留右表所有行)。
  3. 全聯結:返回兩表所有行(MySQL 不直接支援,可用 UNION 模擬)。
  4. 交叉聯結:笛卡兒積,MySQL 中 CROSS JOIN 等同 INNER JOIN。

左/右聯結等價性

-- 以下兩句結果相同
SELECT A.name, B.name FROM A LEFT JOIN B ON A.id = B.id;
SELECT A.name, B.name FROM B RIGHT JOIN A ON B.id = A.id;

記憶口訣:左聯結保左、右聯結保右,被保留的那張表所有行一定會出現在結果集中。

MySQL JOIN 完整語法結構

table_reference [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference STRAIGHT_JOIN table_factor [ON condition]
| table_reference LEFT [OUTER] JOIN table_reference join_condition
| table_reference RIGHT [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [LEFT | RIGHT [OUTER]] JOIN table_factor

join_condition: ON conditional_expr | USING (column_list)

table_factor 進階用法

table_factor 允許在 JOIN 後使用括號包裹多張表,實現複雜聯結:

SELECT * FROM t1
LEFT JOIN (t2, t3, t4) ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c);

等同於:

SELECT * FROM t1
LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)
ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c);

實戰建議

  • 優先使用 LEFT JOIN,以「主表在左」為習慣,閱讀性更佳。
  • 聯結條件欄位務必建立索引,否則大表聯結將觸發全表掃描。
  • 避免在 ON 條件中使用函數或運算式,導致索引失效。
  • 需要時可用 STRAIGHT_JOIN 強制連接順序,但需深度理解執行計畫。
copyright © 萬盛學電腦網 all rights reserved