所以我知道在查詢的WHERE子句中添加過濾器條件是一種很好的編程習慣,以便儘量減少在連接中返回的行數,但是當我們如何決定是否應該在WHERE而不是FROM中添加一個過濾器?例如:在WHERE中添加過濾器與FROM
SELECT a.ColA, a.ColB, a.ColC, b.ColD, b.ColE
FROM TblA a INNER JOIN TblB b
On a.ColA = b.ColD
AND a.ColA = 'X'
AND a.ColB = 'Y'
WHERE b.ColD = 'ABC'
在此查詢,如果我說什麼b.ColD的AND子句,而不是在哪裏?這不會使查詢更有效率嗎?我知道這兩種方法的結果可能有所不同,但我不知道爲什麼?
謝謝。
根據tsql標記判斷,您使用的是SQL Server。管理工作室能夠顯示查詢的執行計劃,因此您可以比較兩個版本的差異。雖然我的_guess_是沒有太大的區別。 –
這不是一個重複:OP是詢問過濾器,而不是JOINs – gbn
@gbn我不確定OP的措辭(「過濾器」與「條件」等)如此重要,因爲OP給出的例子基本上與[here](http://stackoverflow.com/q/1907335/880904),[here](http://stackoverflow.com/q/1018952/880904),[here](http:/ /stackoverflow.com/q/1401889/880904),[這裏](http://stackoverflow.com/q/15483808/880904)等等。所有這些都有'JOIN ... ON',詢問'WHERE',幷包括類似的答案給你。在我看來,這個問題已經得到解答,或者我們是否也應該重新開放[這個問題](http://stackoverflow.com/q/13145275/880904)? –