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

SQL 表連接圖解大全:內連接、外連接、交叉連接與 Venn 圖對應關係

     編輯:關於SqlServer

SQL 表連接是關係查詢核心,但「左/右/全/內/交叉」五種連接類型常令人困惑。本文以兩張示例表 (Table1, Table2) 為基礎,結合 Venn 圖、結果集截圖、實際 SQL 與解釋,建立直觀的連接類型心智模型。

示例數據

Table1 (id, name)          Table2 (id, score)
id  name                   id  score
1   Alice                  1   90
2   Bob                    2   85
3   Carol                  4   95  -- Table1 無 id=4
-- 無 id=4                  -- Table1 id=3 無匹配

五大連接類型對比

1. 內連接

SELECT t1.id, t1.name, t2.score
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.id = t2.id;

結果:僅返回雙方均存在的匹配行 (id=1,2)。
Venn 圖:兩圓交集部分。
語義:「給我同時在兩表中存在的記錄」。

2. 左外連接

SELECT t1.id, t1.name, t2.score
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id = t2.id;

結果:保留 Table1 所有行,無匹配處 score=NULL (id=3 保留)。
Venn 圖:左圓全體 + 交集。
語義:「給我左表所有記錄,右表有則帶上,無則 NULL」。

3. 右外連接

SELECT t1.id, t1.name, t2.score
FROM Table1 t1
RIGHT JOIN Table2 t2 ON t1.id = t2.id;

結果:保留 Table2 所有行,無匹配處 name=NULL (id=4 保留)。
Venn 圖:右圓全體 + 交集。
語義:「給我右表所有記錄,左表有則帶上,無則 NULL」。

4. 全外連接

SELECT t1.id, t1.name, t2.score
FROM Table1 t1
FULL JOIN Table2 t2 ON t1.id = t2.id;

結果:雙方所有行,無匹配處對側列為 NULL (id=3,4 均保留)。
Venn 圖:兩圓並集。
語義:「給我兩表所有記錄,能匹配則合併,不能則各自保留」。

5. 交叉連接

SELECT t1.id, t1.name, t2.id, t2.score
FROM Table1 t1
CROSS JOIN Table2 t2;  -- 無 ON 條件

結果:笛卡爾積 (3×3=9 行),每行 Table1 與每行 Table2 組合。
Venn 圖:無對應 (非集合論關係)。
語義:「給我所有可能組合」。
注意:極易產生巨大結果集,生產環境極少直接使用,常用於生成測試數據、坐標網格、全排列場景。

核心區別速記表

連接類型保留左表保留右表匹配條件典型場景
INNER JOIN❌❌✅主從關聯、明細查詢
LEFT JOIN✅❌✅主表帶明細、報表主行
RIGHT JOIN❌✅✅同 LEFT,習慣交換表順序
FULL JOIN✅✅✅數據對賬、合併異構源
CROSS JOIN✅ (笛卡爾)✅ (笛卡爾)❌測試數據、矩陣生成

進階技巧

  1. 多表連接順序:優化器自動重排,但建議「小表驅動大表」,或用 OPTION (FORCE ORDER) 固定 (謹慎)。
  2. 連接條件放 WHERE vs ON:
    INNER JOIN 無差異;OUTER JOIN 必須放 ON,放 WHERE 會將外連接隱式轉為內連接 (NULL 被過濾)。
  3. 非等值連接:ON t1.date BETWEEN t2.start AND t2.end、ON t1.val > t2.val 等,利用索引需注意 SARGable。
  4. 半連接/反半連接:EXISTS / NOT EXISTS、IN / NOT IN (注意 NULL 陷阱) 替代連接後 DISTINCT,性能更優。

練習建議

在 SSMS 中建立上述兩表,逐條執行五條 SQL,對比結果集行數、NULL 分佈、執行計劃 (估計行數 vs 實際行數)。反覆練習,將 Venn 圖、SQL、結果集三位一體內化為直覺。

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