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

SQL JOIN 類型圖解:內部、左外、右外、全外、交叉、自我聯結

     編輯:關於SqlServer

六大 JOIN 類型速查

JOIN 類型關鍵字保留方結果列數典型用途
內部聯結INNER JOIN雙方匹配列≤ min(左,右)僅需雙方都有資料的情況
左外部聯結LEFT [OUTER] JOIN左表全部= 左表列數主表帶明細,明細可能不存在
右外部聯結RIGHT [OUTER] JOIN右表全部= 右表列數同上,方向相反
全外部聯結FULL [OUTER] JOIN雙方全部左 + 右 - 交集雙方都要保留,找出差異
交叉聯結CROSS JOIN笛卡兒積左 × 右生成所有組合 (如報表矩陣)
自我聯結INNER/LEFT JOIN 同表視 JOIN 類型視條件階層結構 (員工-主管)、遞迴查詢

圖解說明 (請參考原文圖片)

原文包含一張示意圖 (2017011212025515.jpg) 展示兩張表 TableA、TableB 以 ID 聯結時,六種 JOIN 的結果集陰影區域。此處以文字描述:

  • INNER JOIN:僅中間重疊區 (雙方都有 ID)。
  • LEFT JOIN:左圓完整 + 重疊區;右表無匹配處為 NULL。
  • RIGHT JOIN:右圓完整 + 重疊區;左表無匹配處為 NULL。
  • FULL JOIN:兩圓完整合併;無匹配處皆為 NULL。
  • CROSS JOIN:無 ON 條件,每列與對方每列配對。
  • SELF JOIN:表別名 A/B 自身聯結,如 ON A.MgrID = B.EmpID。

實戰範例

-- 左外部聯結:所有客戶 + 其訂單 (無訂單顯示 NULL)
SELECT c.CustomerName, o.OrderID
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;

-- 自我聯結:員工與主管姓名
SELECT e.Name AS Employee, m.Name AS Manager
FROM Employees e
LEFT JOIN Employees m ON e.ManagerID = m.EmployeeID;

-- 交叉聯結:顏色 × 尺寸 產生所有 SKU
SELECT c.ColorName, s.SizeName
FROM Colors c
CROSS JOIN Sizes s;

常見錯誤與建議

  • 外部聯結的篩選條件放在 ON (保留外部列) vs WHERE (轉為內部聯結) — 必須明確區分。
  • 避免不必要的 CROSS JOIN 造成資料爆炸。
  • 自我聯結務必使用表別名,並在 ON 條件明確指定關聯欄位。
  • 大表 JOIN 確保聯結欄位有索引,考慮 HASH JOIN vs MERGE JOIN 提示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved