JOIN 操作中ON 子句與WHERE 子句
使用INNER JOIN 操作時,ON 子句和WHERE 子句都可以用於過濾數據。雖然它們在某些情況下看起來可以互換,但存在一些值得注意的細微差別。
ON 子句
ON 子句用於指定必須滿足的特定條件要包含在連接結果中的行。它在連接層級過濾數據,確保僅合併兩個表中滿足指定條件的行。
WHERE 子句
WHERE 子句用於過濾連接操作發生後的行。它將條件應用於組合資料集,進一步細化結果。
效能注意事項
一般來說,使用ON 子句或WHERE 子句之間沒有顯著的效能差異用於過濾INNER JOIN 操作中的資料。不過,也有例外。
外連接
使用外連接(例如 LEFT OUTER JOIN)時,過濾條件的放置可能會影響結果。在 ON 子句中套用篩選器將從右表(對於 LEFT OUTER JOIN)中排除不符合條件的行。另一方面,在 WHERE 子句中套用篩選器將在連接後過濾組合資料集中的行,從而可能會傳回更多行。
範例:
考慮以下範例:
SELECT * FROM Foo f LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) AND (b.IsApproved = 1);
在本例中,將ON 子句與篩選器一起使用(b. IsApproved = 1)將從Bar 中排除IsApproved 未設定為1 的所有行。
或者,
SELECT * FROM Foo f LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) WHERE (b.IsApproved = 1);
這將首先執行聯接操作,然後根據 IsApproved 條件過濾結果集,可能會從 Bar 返回 IsApproved 為 NULL 的行。
其他注意事項
以上是JOIN 中的 ON 與 WHERE 子句:何時應該使用 Which?的詳細內容。更多資訊請關注PHP中文網其他相關文章!