首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 四大連接類型深度解析:內連、左連、右連、全連

     編輯:MySQL 資料庫相關知識

連接類型概覽

SQL 連接操作是多表查詢的核心,按結果集範圍分為四類,對應集合論的交集、左差集、右差集、並集。

樣本數據準備

表 a (主表)          表 b (從表)
id | name           id | job | parent_id
1  | 張三            1  | 23  | 1
2  | 李四            2  | 34  | 2
3  | 王五            3  | 34  | 4
關聯條件:a.id = b.parent_id

四種連接對比

1. 內連接 - 交集

SELECT a.*, b.* FROM a INNER JOIN b ON a.id = b.parent_id;
-- 等價於
SELECT a.*, b.* FROM a JOIN b ON a.id = b.parent_id;

結果:僅返回雙方均匹配的行 (2 行)

1 | 張三 | 1 | 23 | 1
2 | 李四 | 2 | 34 | 2

2. 左外連接 - 左表全量 + 右表匹配

SELECT a.*, b.* FROM a LEFT JOIN b ON a.id = b.parent_id;

結果:左表所有行,無匹配處填 NULL (3 行)

1 | 張三 | 1 | 23 | 1
2 | 李四 | 2 | 34 | 2
3 | 王五 | NULL | NULL | NULL

3. 右外連接 - 右表全量 + 左表匹配

SELECT a.*, b.* FROM a RIGHT JOIN b ON a.id = b.parent_id;

結果:右表所有行,無匹配處填 NULL (3 行)

1 | 張三 | 1 | 23 | 1
2 | 李四 | 2 | 34 | 2
NULL | NULL | 3 | 34 | 4

4. 全外連接 - 並集

SELECT a.*, b.* FROM a FULL JOIN b ON a.id = b.parent_id;

結果:雙表所有行,無匹配處填 NULL (4 行)

1 | 張三 | 1 | 23 | 1
2 | 李四 | 2 | 34 | 2
NULL | NULL | 3 | 34 | 4
3 | 王五 | NULL | NULL | NULL

維恩圖直觀理解

  • INNER JOIN:🔵∩🔴 = 重疊區域
  • LEFT JOIN:🔵 全部 + 🔴∩🔵
  • RIGHT JOIN:🔴 全部 + 🔵∩🔴
  • FULL JOIN:🔵 ∪ 🔴 = 所有區域

實戰選型指南

業務場景推薦連接理由
雙方必須同時存在 (訂單-用戶)INNER JOIN效能最優,結果集最小
主表全量展示,從表可選 (用戶-訂單列表)LEFT JOIN保證主表數據不丟失
從表全量,主表可選 (字典表關聯)RIGHT JOIN語義更清晰,或用 LEFT JOIN 互換表順序
雙向全量對賬 (數據核對)FULL JOIN發現雙方孤兒數據

效能優化提示

  • ON 條件列務必建立索引
  • 優先使用 INNER JOIN,優化器可自由調整驅動表順序
  • 大表驅動小表:小表結果集驅動大表索引查找
  • 避免 SELECT *,只選取必要列減少網絡傳輸

總結

掌握四種連接的語義差異與結果集特徵,是編寫高效 SQL 的基礎。實際開發中 90%+ 場景使用 INNER JOIN 與 LEFT JOIN,RIGHT JOIN 可通過調換表順序轉為 LEFT JOIN,FULL JOIN 多用於數據治理與對賬場景。

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