Trong SQL, WHERE và HAVING đều được sử dụng để lọc dữ liệu, tuy nhiên chúng có những điểm khác biệt quan trọng:
1. Vị trí sử dụng:
- WHERE: được sử dụng trong mệnh đề SELECT trước GROUP BY. Mục đích của WHERE là lọc các dòng dữ liệu trước khi thực hiện phép tính tổng hợp.
- HAVING: được sử dụng trong mệnh đề SELECT sau GROUP BY. Mục đích của HAVING là lọc các nhóm dữ liệu sau khi đã thực hiện phép tính tổng hợp.
2. Loại dữ liệu được lọc:
- WHERE: có thể lọc dữ liệu dựa trên giá trị của bất kỳ cột nào trong bảng.
- HAVING: chỉ có thể lọc dữ liệu dựa trên giá trị tổng hợp (SUM, COUNT, AVG, MIN, MAX,…) của các nhóm dữ liệu.
3. Ví dụ:
Giả sử bạn có bảng dữ liệu về nhân viên với các cột: id
, name
, department
, salary
.
- WHERE: Lọc các nhân viên có mức lương cao hơn 10 triệu:
SQL
SELECT * FROM employees WHERE salary > 10000000;
- HAVING: Lọc các bộ phận có tổng lương cao hơn 1 tỷ:
SQL
SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department
HAVING total_salary > 1000000000;
4. Tóm tắt:
Tính năng | WHERE | HAVING |
---|---|---|
Vị trí | Trước GROUP BY | Sau GROUP BY |
Loại dữ liệu được lọc | Cột | Giá trị tổng hợp |
Ví dụ | Lọc dòng dữ liệu | Lọc nhóm dữ liệu |
Lưu ý:
- Có thể sử dụng WHERE và HAVING cùng nhau trong một câu truy vấn.
- WHERE được sử dụng thường xuyên hơn HAVING.