14/10/2018, 21:39
Sự khác nhau giữa condition khi được đặt giữa mệnh đề ON và khi được đặt ở mệnh đề WHERE
Sql, là những khái niệm cơ bản nhất của việc lập trình, tuy nhiên, có thể một số bạn vẫn chưa biết, hoặc thiếu để ý đúng mức một số vấn đề ===> dẫn đến việc xảy ra bug : Ta có một ví dụ đơn giản như sau : SELECT CUS.* FROM Customers AS CUS LEFT JOIN Orders AS ORD ON CUS.CustomerID = ...
Sql, là những khái niệm cơ bản nhất của việc lập trình, tuy nhiên, có thể một số bạn vẫn chưa biết, hoặc thiếu để ý đúng mức một số vấn đề ===> dẫn đến việc xảy ra bug :
Ta có một ví dụ đơn giản như sau :
SELECT CUS.* FROM Customers AS CUS LEFT JOIN Orders AS ORD ON CUS.CustomerID = ORD.CustomerID WHERE ORD.OrderDate >'20090515'
SELECT CUS.* FROM Customers AS CUS LEFT JOIN Orders AS ORD ON CUS.CustomerID = ORD.CustomerID AND ORD.OrderDate >'20090515'
Ở câu query đầu tiên, ta thấy câu điều kiện được đặt ở mệnh đề WHERE, dưới đây là cách thức xử lý của sql :
- Select từ table Orders các record có điều kiện ORD.CustomerID = CUS.CustomerID
- Join kết quả của 2 table
- Lọc kết quả đã tìm được với điều kiện ORD.OrderDate >'20090515' và trả về
Với câu query thứ 2, cách thức xử lý của sql :
- Select từ table Orders các record có đồng thời điều kiện (ORD.CustomerID = CUS.CustomerID) và (ORD.OrderDate >'20090515'). Tức filtered.
- Join kết quả của 2 table và trả về
Do đó :
- Về performance, vì data ở query thứ 2 đã được lọc(filtered) trước khi join 2 bảng với nhau, nên performance có thể cải thiện hơn so với query thứ 1(!?!)(Theo như Một số comment trên Stackoverflow. Not sure