LEFT JOIN 是 LEFT OUTER JOIN 的簡寫,兩者完全等價。同理 RIGHT JOIN = RIGHT OUTER JOIN。
SELECT * FROM A LEFT JOIN B ON A.id = B.id
ON 條件的行附加到右側;無匹配則右側列填 NULL。SELECT * FROM A RIGHT JOIN B ON A.id = B.id
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 中對右表非空列加條件(如上例 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,無語義差異。