WHERE
được sử dụng để chọn dữ liệu trong các bảng gốc đang được xử lý.
HAVING
được sử dụng để lọc dữ liệu trong tập kết quả do truy vấn tạo ra. Điều này có nghĩa là nó có thể tham chiếu các giá trị và bí danh tổng hợp trong SELECT
mệnh đề.
Ví dụ, có thể viết:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
Điều này sẽ không hoạt động khi sử dụng WHERE
bởi vì diff
là một bí danh, không phải là một trong các cột ban đầu của bảng. Thay vào đó, bạn có thể viết:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
nhưng sau đó nó có thể phải thực hiện tất cả các phép trừ hai lần:một lần để chọn và một lần nữa để tạo ra tập kết quả.