萬盛學電腦網

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

SQL 內連接、左連接與右連接的核心差異詳解

前言

在 MySQL 資料庫操作中,透過內鍵與外鍵關聯多張表格是常見需求。其中 INNER JOIN(內連接)、LEFT JOIN(左連接)與 RIGHT JOIN(右連接)是最基礎也最重要的連接方式。本文將透過實際資料範例,深入淺出說明三者的行為差異與適用場景。

範例資料準備

我們建立兩張表格:students(學生基本資料)與 score(成績單)。請注意:學號 16048008 在 students 表中存在,但在 score 表中卻沒有對應紀錄。

students 表資料:

score 表資料:

1. 內連接(INNER JOIN)

內連接只會回傳「兩張表都有匹配」的資料列。若某筆資料在另一張表找不到對應值,該筆資料會被直接過濾掉。

SELECT * FROM students st INNER JOIN score sc ON st.sid = sc.stu_id;

執行結果截圖(僅顯示尾部):

觀察: 結果只顯示到學號 16048007,16048008 因在 score 表無對應資料而被排除。結論:內連接僅保留雙方皆有關聯的資料。

2. 左連接(LEFT JOIN)

左連接以 LEFT 關鍵字左側的表格為「基準表」,會完整保留左表所有資料;右表若有匹配則顯示,無匹配則以 NULL 填補;右表多出的資料(左表無對應)則不顯示。

情境 A:students LEFT JOIN score

SELECT * FROM students st LEFT JOIN score sc ON st.sid = sc.stu_id;

學號 16048008 在右表無資料,系統自動以 NULL 補齊所有 score 欄位。

情境 B:score LEFT JOIN students

SELECT * FROM score sc LEFT JOIN students st ON st.sid = sc.stu_id;

此時以 score 為基準,原本 students 表中 16048008 因右表(現為左表)無對應而被移除。可見 左連接永遠以左表為主,右表只配合左表顯示。

3. 右連接(RIGHT JOIN)

右連接邏輯與左連接鏡像對稱:以右表為基準,左表無匹配補 NULL,左表多餘資料不顯示。此處不再贅述。

總結比較表

連接類型核心邏輯適用場景
INNER JOIN雙向匹配,僅保留雙方都有的資料只需「完整配對」資料時,如訂單與會員雙方都必須存在
LEFT JOIN左表全保留,右表匹配顯示、不匹配補 NULL主表資料不可遺漏,如「所有學生的成績單」(含無成績者)
RIGHT JOIN右表全保留,左表匹配顯示、不匹配補 NULL較少用,可透過交換表順序改用 LEFT JOIN 替代

實務建議

  • 預設優先使用 INNER JOIN,效能最好、語意最清晰。
  • 需要保留「主表」所有資料時,使用 LEFT JOIN 並將主表放左側。
  • 避免使用 RIGHT JOIN,統一用 LEFT JOIN 可降低維護認知負擔。
  • 連接條件欄位務必建立索引,否則大資料量下會全表掃描導致效能災難。
copyright © 萬盛學電腦網 all rights reserved