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

SQL JOIN 完整指南:內聯接、外聯接與交叉聯接詳解

     編輯:關於SqlServer

JOIN 是關聯式資料庫核心操作。本文系統整理 SQL-92 標準語法下的各類聯接類型、行為差異與適用場景,並說明舊式 *=/=* 語法的棄用原因。

內聯接(INNER JOIN)

僅回傳兩張表皆符合聯接條件的資料列。不匹配的列被過濾。

SELECT * FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;

外聯接(OUTER JOIN)

左向外聯接(LEFT [OUTER] JOIN)

回傳左表所有列,右表無匹配則為 NULL。

SELECT c.CompanyName, o.OrderID
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- 無訂單客戶的 OrderID 顯示 NULL

右向外聯接(RIGHT [OUTER] JOIN)

左向外聯接的鏡像,回傳右表所有列。

完整外部聯接(FULL [OUTER] JOIN)

回傳兩表所有列,任一邊無匹配則補 NULL。

交叉聯接(CROSS JOIN)

笛卡兒積,無 ON 子句。若左表 M 列、右表 N 列,結果 M×N 列。慎用於大表。

SELECT * FROM Colors CROSS JOIN Sizes; -- 顏色×尺寸組合

舊式語法 vs SQL-92 標準

類型舊式 (WHERE 子句)SQL-92 (FROM 子句)
左外聯接Table1.Col *= Table2.ColLEFT JOIN ... ON ...
右外聯接Table1.Col =* Table2.ColRIGHT JOIN ... ON ...

強烈建議使用 SQL-92 語法:語意明確、避免歧義(如複雜條件下舊式語法易產生錯誤結果)、符合標準、可移植性佳。

效能提示

  • 確保聯接欄位有索引。
  • 優先使用內聯接,外聯接僅在業務需要保留無匹配列時使用。
  • 大表聯接前考慮篩選縮小資料集。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved