首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 連接查詢詳解:INNER JOIN、LEFT JOIN、RIGHT JOIN 與 FULL JOIN 差異比較

     編輯:MySQL 綜合教學

MySQL 連接查詢詳解:INNER JOIN、LEFT JOIN、RIGHT JOIN 與 FULL JOIN 差異比較

隱性連接 vs 顯性連接

  • 隱性連接: 在 WHERE 子句中指定連接條件(舊式語法)。
  • 顯性連接: 使用 INNER JOIN ... ON 語法(ANSI SQL-92 標準),可讀性與維護性更佳。

四種 JOIN 類型圖解

連接類型口訣結果集說明Venn 圖概念
INNER JOIN 「有效連接」 僅返回 兩張表都符合 ON 條件 的資料列。 A ∩ B(交集)
LEFT JOIN 「有左顯示」 返回 左表所有資料,右表符合條件的資料;右表無匹配則以 NULL 填充。 A 全集 + (A ∩ B)
RIGHT JOIN 「有右顯示」 返回 右表所有資料,左表符合條件的資料;左表無匹配則以 NULL 填充。 B 全集 + (A ∩ B)
FULL JOIN 「全連接」 返回 兩張表所有資料,無匹配側以 NULL 填充。
MySQL 不直接支援,可用 LEFT JOIN UNION RIGHT JOIN 模擬。
A ∪ B(聯集)

語法範例

-- 內連接:只有雙方都有的訂單與客戶
SELECT o.id, c.name, o.amount
FROM orders o
INNER JOIN customers c ON o.customer_id = c.id;

-- 左連接:所有客戶,含無訂單者
SELECT c.name, o.id, o.amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id;

-- 右連接:所有訂單,含無對應客戶者(罕用,可改 LEFT JOIN 交換表順序)
SELECT c.name, o.id, o.amount
FROM customers c
RIGHT JOIN orders o ON c.id = o.customer_id;

-- 全連接模擬:MySQL 不支援 FULL JOIN
SELECT c.name, o.id, o.amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
UNION
SELECT c.name, o.id, o.amount
FROM customers c
RIGHT JOIN orders o ON c.id = o.customer_id;

效能與最佳實踐

  • 優先使用 INNER JOIN,結果集最小,效能最好。
  • LEFT JOIN 若右表無索引,會導致全表掃描,確保 ON 條件欄位有索引。
  • 避免在 ON 條件中使用函數或運算,導致索引失效。
  • 大表關聯小表時,小表驅動大表(Left Join 左表小、Right Join 右表小)。

掌握 JOIN 語義與適用場景,能寫出正確且高效的關聯查詢,是 SQL 進階的關鍵技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved