ON條件:是過濾兩個鏈接表笛卡爾積形成中間表的約束條件。
WHERE條件:在有ON條件的SELECT語句中是過濾中間表的約束條件。在沒有ON的單表查詢中,是限制物理表或者中間查詢結果返回記錄的約束。在兩表或多表連接中是限制連接形成最終中間表的返回結果的約束。
從這里可以看出,將WHERE條件移入ON后面是不恰當的。推薦的做法是:
ON只進行連接操作,WHERE只過濾中間表的記錄。
八、總結
連接查詢是SQL查詢的核心,連接查詢的連接類型選擇依據實際需求。如果選擇不當,非但不能提高查詢效率,反而會帶來一些邏輯錯誤或者性能低下。下面總結一下兩表連接查詢選擇方式的依據:
1、 查兩表關聯列相等的數據用內連接。
2、 Col_L是Col_R的子集時用右外連接。
3、 Col_R是Col_L的子集時用左外連接。
4、 Col_R和Col_L彼此有交集但彼此互不為子集時候用全外。
5、 求差操作的時候用聯合查詢。
多個表查詢的時候,這些不同的連接類型可以寫到一塊。例如:
SELECT T1.C1,T2.CX,T3.CY
FROM TAB1 T1
INNER JOIN TAB2 T2 ON (T1.C1=T2.C2)
INNER JOIN TAB3 T3 ON (T1.C1=T2.C3)
LEFT OUTER JOIN TAB4 ON(T2.C2=T3.C3);
WHERE T1.X >T3.Y;
文章來源于領測軟件測試網 http://www.kjueaiud.com/