在 MySQL 資料庫操作中,透過內鍵與外鍵關聯多張表格是常見需求。其中 INNER JOIN(內連接)、LEFT JOIN(左連接)與 RIGHT JOIN(右連接)是最基礎也最重要的連接方式。本文將透過實際資料範例,深入淺出說明三者的行為差異與適用場景。
我們建立兩張表格:students(學生基本資料)與 score(成績單)。請注意:學號 16048008 在 students 表中存在,但在 score 表中卻沒有對應紀錄。
students 表資料:

score 表資料:

內連接只會回傳「兩張表都有匹配」的資料列。若某筆資料在另一張表找不到對應值,該筆資料會被直接過濾掉。
SELECT * FROM students st INNER JOIN score sc ON st.sid = sc.stu_id;
執行結果截圖(僅顯示尾部):

觀察: 結果只顯示到學號 16048007,16048008 因在 score 表無對應資料而被排除。結論:內連接僅保留雙方皆有關聯的資料。
左連接以 LEFT 關鍵字左側的表格為「基準表」,會完整保留左表所有資料;右表若有匹配則顯示,無匹配則以 NULL 填補;右表多出的資料(左表無對應)則不顯示。
SELECT * FROM students st LEFT JOIN score sc ON st.sid = sc.stu_id;

學號 16048008 在右表無資料,系統自動以 NULL 補齊所有 score 欄位。
SELECT * FROM score sc LEFT JOIN students st ON st.sid = sc.stu_id;

此時以 score 為基準,原本 students 表中 16048008 因右表(現為左表)無對應而被移除。可見 左連接永遠以左表為主,右表只配合左表顯示。
右連接邏輯與左連接鏡像對稱:以右表為基準,左表無匹配補 NULL,左表多餘資料不顯示。此處不再贅述。
| 連接類型 | 核心邏輯 | 適用場景 |
|---|---|---|
| INNER JOIN | 雙向匹配,僅保留雙方都有的資料 | 只需「完整配對」資料時,如訂單與會員雙方都必須存在 |
| LEFT JOIN | 左表全保留,右表匹配顯示、不匹配補 NULL | 主表資料不可遺漏,如「所有學生的成績單」(含無成績者) |
| RIGHT JOIN | 右表全保留,左表匹配顯示、不匹配補 NULL | 較少用,可透過交換表順序改用 LEFT JOIN 替代 |
INNER JOIN,效能最好、語意最清晰。LEFT JOIN 並將主表放左側。RIGHT JOIN,統一用 LEFT JOIN 可降低維護認知負擔。