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

MySQL LEFT JOIN 與 LEFT OUTER JOIN 等價關係解析:左外連接行為與 WHERE 條件陷阱

     編輯:MySQL 綜合教學

LEFT JOIN = LEFT OUTER JOIN:MySQL 左外連接本質

語法等價

LEFT JOIN 是 LEFT OUTER JOIN 的簡寫,兩者完全等價。同理 RIGHT JOIN = RIGHT OUTER JOIN。

左外連接行為

SELECT * FROM A LEFT JOIN B ON A.id = B.id
  • 以 A 表為基準,保留 A 所有行。
  • B 表中匹配 ON 條件的行附加到右側;無匹配則右側列填 NULL。

右外連接行為

SELECT * FROM A RIGHT JOIN B ON A.id = B.id
  • 以 B 表為基準,保留 B 所有行,A 無匹配填 NULL。

實例驗證

SELECT *
FROM app_id_gx7 LEFT OUTER JOIN ad_network_app
  ON app_id_gx7.app_id = ad_network_app.app_id
WHERE ad_network_app.ad_network_id = 5;

測試有無 OUTER 關鍵字,執行計劃與結果完全一致。

常見陷阱:WHERE 條件將外連接轉為內連接

若在 WHERE 中對右表非空列加條件(如上例 ad_network_id=5),則無匹配行(右表列為 NULL)被過濾,實際變為內連接。

正確做法:將右表條件移至 ON 子句:

SELECT *
FROM app_id_gx7 LEFT JOIN ad_network_app
  ON app_id_gx7.app_id = ad_network_app.app_id
  AND ad_network_app.ad_network_id = 5;

總結

  • LEFT JOIN 簡寫即 LEFT OUTER JOIN,無語義差異。
  • 外連接保留駕駛表所有行,非駕駛表無匹配列為 NULL。
  • 非駕駛表過濾條件必須寫在 ON 中,否則隱式轉內連接。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved