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

SQL 連接大全:內連接、外連接(左/右/全) 圖解與語法詳解

     編輯:MySQL 綜合教學

連接類型總覽

類型關鍵字結果集特徵
內連接INNER JOIN / JOIN僅返回兩表 **同時滿足** 條件的行
左外連接LEFT [OUTER] JOIN返回 **左表所有行** + 右表匹配行 (無匹配則 NULL)
右外連接RIGHT [OUTER] JOIN返回 **右表所有行** + 左表匹配行 (無匹配則 NULL)
全外連接FULL [OUTER] JOIN返回 **兩表所有行** (MySQL 不支援,需 UNION 模擬)

語法與邏輯詳解

1. 內連接 (INNER JOIN)

SELECT * FROM A INNER JOIN B ON A.id = B.id;
-- 等價於
SELECT * FROM A, B WHERE A.id = B.id;

特點:過濾掉無匹配的行,結果集行數 ≤ 兩表最小行數。

2. 左外連接 (LEFT JOIN)

SELECT * FROM A LEFT JOIN B ON A.id = B.id;
  • 保留 **A 表 (左表) 所有行**
  • B 表無匹配時,B 列顯示 NULL
  • 常用於「主表帶從表資訊」,如:用戶表 LEFT JOIN 訂單表 (查無訂單用戶)

3. 右外連接 (RIGHT JOIN)

SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
  • 保留 **B 表 (右表) 所有行**
  • A 表無匹配時,A 列顯示 NULL
  • 邏輯上等價於 `B LEFT JOIN A`,習慣統一用 LEFT JOIN 避免混淆。

4. 全外連接 (FULL OUTER JOIN)

MySQL **不直接支援**,需用 UNION 模擬:

SELECT * FROM A LEFT JOIN B ON A.id = B.id
UNION
SELECT * FROM A RIGHT JOIN B ON A.id = B.id;

或 (效能更好):

SELECT * FROM A LEFT JOIN B ON A.id = B.id
UNION ALL
SELECT * FROM A RIGHT JOIN B ON A.id = B.id WHERE A.id IS NULL;

圖解關係 (文本版)

內連接:     ●────●     (交集)
左連接:   ●────●       (左全集 + 交集)
右連接:       ●────●   (右全集 + 交集)
全連接:   ●────●────●  (並集)

實戰選型建議

  • **只需匹配數據** → `INNER JOIN`
  • **主表全量 + 從表可選** → `LEFT JOIN` (統一習慣)
  • **需雙表全量** → `FULL JOIN` 模擬
  • **效能**:`INNER JOIN` 通常最快,外連接因需保留非匹配行,成本稍高。
  • **ON vs WHERE**:外連接中,`ON` 決定如何匹配,`WHERE` 過濾最終結果。若將右表條件放 `WHERE` 會隱性轉為內連接。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved