如下兩張表:
表A 表B
--- ---
F F
--- ---
A A
B B
C F
D G
E H
--- ---
WHERE:
SELECT A.F AS FA, dbo.B.F AS FB
FROM dbo.A LEFT OUTER JOIN dbo.B ON dbo.A.F = dbo.B.F
WHERE A.F = 'A'
-----------
FA FB
-----------
A A
-----------
AND:
SELECT A.F AS FA, dbo.B.F AS FB
FROM dbo.A LEFT OUTER JOIN dbo.B ON dbo.A.F = dbo.B.F
AND A.F = 'A'
------------
FA FB
------------
A A
B null
C null
D null
E null
------------
可以看出使用 WHERE 條件會篩選串連查詢的結果,但不影響返回的右表欄位值;
使用 AND 不會對結果進行篩選,結果一定是包含了所有的左表記錄,但是會影響
返回的右表欄位值,如果 ON 後面的邏輯判斷返回 true 顯示右表值,為 false 則顯示 null。
SELECT A.F AS FA, dbo.B.F AS FB
FROM dbo.A LEFT OUTER JOIN dbo.B ON dbo.A.F = dbo.B.F AND 1 = 1
FA FB
------------
A A
B B
C null
D null
E null
------------
SELECT A.F AS FA, dbo.B.F AS FB
FROM dbo.A LEFT OUTER JOIN dbo.B ON dbo.A.F = dbo.B.F AND 1 = 2
FA FB
------------
A null
B null
C null
D null
E null
------------
如果是 INNER JOIN, WHERE 和 AND 效果相同。
SELECT A.F AS FA, dbo.B.F AS FB
FROM dbo.A INNER JOIN dbo.B ON dbo.A.F = dbo.B.F
WHERE A.F = 'A' / AND A.F = 'A'
-----------
FA FB
-----------
A A
-----------