So sánh WHERE và HAVING
Trong SQL, cả WHERE và HAVING đều được sử dụng để lọc các hàng trong kết quả truy vấn, nhưng chúng có sự khác biệt về cách sử dụng và thời điểm áp dụng.
WHERE
WHEREMục đích:
WHEREđược sử dụng để lọc các hàng dữ liệu trước khi các nhóm được tạo ra và các phép toán tổng hợp (aggregate functions) được thực hiện.Áp dụng:
WHEREđược sử dụng với các điều kiện lọc trên các cột của bảng.Thời điểm áp dụng:
WHERElọc các hàng ngay sau khi dữ liệu được truy xuất từ bảng nhưng trước khi bất kỳ nhóm nào được tạo ra bởiGROUP BY.
Ví dụ về WHERE:
SELECT name, age
FROM users
WHERE age > 18;Trong ví dụ này, tất cả các hàng có giá trị age lớn hơn 18 sẽ được chọn.
HAVING
HAVINGMục đích:
HAVINGđược sử dụng để lọc các nhóm dữ liệu sau khi các nhóm đã được tạo ra và các phép toán tổng hợp đã được thực hiện.Áp dụng:
HAVINGđược sử dụng với các điều kiện lọc trên các nhóm dữ liệu, thường liên quan đến các phép toán tổng hợp nhưCOUNT,SUM,AVG,MIN, vàMAX.Thời điểm áp dụng:
HAVINGlọc các nhóm sau khi các nhóm đã được tạo ra bởiGROUP BY.
Ví dụ về HAVING:
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;Trong ví dụ này, tất cả các nhóm department có số lượng nhân viên (COUNT(*)) lớn hơn 10 sẽ được chọn.
So sánh WHERE và HAVING
WHERE và HAVINGTiêu chí
WHERE
HAVING
Mục đích
Lọc các hàng trước khi nhóm được tạo ra
Lọc các nhóm sau khi nhóm đã được tạo ra
Áp dụng
Trên các cột của bảng
Trên các nhóm dữ liệu
Thời điểm áp dụng
Trước khi các phép toán tổng hợp được thực hiện
Sau khi các phép toán tổng hợp được thực hiện
Sử dụng với
Không sử dụng với các phép toán tổng hợp
Thường sử dụng với các phép toán tổng hợp
Ví dụ kết hợp WHERE và HAVING:
WHERE và HAVING:Trong ví dụ này:
WHERE age > 30lọc các hàng nhân viên có tuổi lớn hơn 30 trước khi tạo nhóm theodepartment.HAVING total_salary > 50000lọc các nhóm có tổng lương lớn hơn 50,000 sau khi các nhóm đã được tạo và tổng lương đã được tính.
Tổng kết
WHEREđược sử dụng để lọc các hàng trước khi nhóm được tạo và áp dụng trên các cột của bảng.HAVINGđược sử dụng để lọc các nhóm sau khi nhóm đã được tạo và thường áp dụng với các phép toán tổng hợp.
Last updated