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

SQL LEFT JOIN、RIGHT JOIN、INNER JOIN 差異圖解完整指南

     編輯:關於SqlServer

三種 JOIN 核心定義

JOIN 類型回傳內容記憶口訣
INNER JOIN兩表皆符合連接條件的列「內」= 交集
LEFT JOIN左表全部列 + 右表匹配列(無匹配則 NULL)「左」= 左表為主
RIGHT JOIN右表全部列 + 左表匹配列(無匹配則 NULL)「右」= 右表為主

實戰範例資料

-- 表 A
aID | aNum
1   | a20050111
2   | a20050112
3   | a20050113
4   | a20050114
5   | a20050115

-- 表 B
bID | bName
1   | 2006032401
2   | 2006032402
3   | 2006032403
4   | 2006032404
8   | 2006032408

1. LEFT JOIN 結果

SELECT * FROM A LEFT JOIN B ON A.aID = B.bID;
aIDaNumbIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404
5a20050115NULLNULL

→ A 表 5 列全保留,B 表無匹配處補 NULL。

2. RIGHT JOIN 結果

SELECT * FROM A RIGHT JOIN B ON A.aID = B.bID;
aIDaNumbIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404
NULLNULL82006032408

→ B 表 5 列全保留,A 表無匹配處補 NULL。

3. INNER JOIN 結果

SELECT * FROM A INNER JOIN B ON A.aID = B.bID;
aIDaNumbIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404

→ 僅保留雙方皆有匹配的 4 列。

補充:FULL OUTER JOIN

兩表所有列皆保留,無匹配處雙邊補 NULL。相當於 LEFT JOIN UNION RIGHT JOIN。

語法標準寫法(SQL-92)

FROM table1 LEFT JOIN table2 ON table1.field = table2.field
-- 建議在 FROM 子句指定 JOIN,將過濾條件留在 WHERE,閱讀性更佳

常見陷阱提醒

  • WHERE 條件放錯位置:若在 WHERE 對右表欄位加條件(如 B.bName = 'X'),LEFT JOIN 會退化為 INNER JOIN。需移至 ON 子句。
  • 多表連接順序:左/右連接具有方向性,連接順序改變會影響結果,建議統一使用 LEFT JOIN、由主表往從表延伸。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved