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

SQL LEFT JOIN 直觀範例:兩表關聯保留左表所有列的運作機制圖解

     編輯:關於SqlServer

LEFT JOIN 是最常用的外聯接,核心語意:「保留左表所有資料列,右表匹配則顯示,不匹配則填 NULL」。本文以最小資料集 (3 列 vs 3 列) 逐步演示 INNER JOIN、LEFT JOIN、RIGHT JOIN 三種結果差異,幫助初學者建立直觀心智模型。

測試資料

表 A表 B
AIDADATEBIDBDATE
1A11B1
2A22B2
3A34B4

三種聯接結果對照

1. INNER JOIN:僅保留雙方皆有的匹配列

SELECT * FROM A INNER JOIN B ON A.AID = B.BID;
AIDADATEBIDBDATE
1A11B1
2A22B2

列 3 (AID=3) 與列 4 (BID=4) 均被捨棄。

2. LEFT JOIN:保留左表 (A) 所有列

SELECT * FROM A LEFT JOIN B ON A.AID = B.BID;
AIDADATEBIDBDATE
1A11B1
2A22B2
3A3NULLNULL

列 3 保留,右表欄位填 NULL。

3. RIGHT JOIN:保留右表 (B) 所有列

SELECT * FROM A RIGHT JOIN B ON A.AID = B.BID;
AIDADATEBIDBDATE
1A11B1
2A22B2
NULLNULL4B4

列 4 保留,左表欄位填 NULL。

核心規則口訣

LEFT JOIN → 左表全保留,右表匹配補齊,不匹配填 NULL。
RIGHT JOIN → 右表全保留,左表匹配補齊,不匹配填 NULL。
INNER JOIN → 只保留雙邊都有的交集。

進階:多重 LEFT JOIN 連鎖

SELECT C.NAME, O.ORDER_DATE, OD.QTY, P.PRODUCT_NAME
FROM CUSTOMERS C
LEFT JOIN ORDERS O ON C.CUST_ID = O.CUST_ID
LEFT JOIN ORDER_DETAILS OD ON O.ORDER_ID = OD.ORDER_ID
LEFT JOIN PRODUCTS P ON OD.PROD_ID = P.PROD_ID;

若客戶無訂單 → 訂單/明細/產品欄位全 NULL;若訂單無明細 → 明細/產品 NULL。每一層 LEFT JOIN 都以左側累積結果為基準。

常見錯誤與修正

錯誤寫法現象修正
LEFT JOIN ... WHERE B.COL = 'X'隱性轉為 INNER JOIN條件移至 ON: LEFT JOIN ... ON A.ID=B.ID AND B.COL='X'
SELECT A.*, B.* FROM A LEFT JOIN B ON ... WHERE B.ID IS NULL正確:找出左表無匹配右表的列 (反向查詢)此用法正確,常用於差異比對
以為 LEFT JOIN 會過濾左表誤解語意左表列數永遠 ≥ 原左表列數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved