So sánh WHERE và HAVING

Trong SQL, cả WHEREHAVING đề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

  • Mụ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: WHERE lọ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ởi GROUP 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

  • Mụ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: HAVING lọc các nhóm sau khi các nhóm đã được tạo ra bởi GROUP 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 WHEREHAVING

Tiê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 WHEREHAVING:

Trong ví dụ này:

  • WHERE age > 30 lọc các hàng nhân viên có tuổi lớn hơn 30 trước khi tạo nhóm theo department.

  • HAVING total_salary > 50000 lọ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