Mệnh đề HAVING trong SQL

Mệnh đề HAVING trong SQL được sử dụng để lọc các bản ghi và chỉ lấy những bản ghi phù hợp với yêu cầu hoặc thực sự cần thiết tương tự như mệnh đề WHERE. Tuy nhiên:

  • WHERE là câu lệnh điều kiện trả kết quả đối chiếu với từng dòng.
  • HAVING là câu lệnh điều kiện trả kết quả đối chiếu cho nhóm được tạo bởi mệnh đề GROUP BY.

Vì vậy mà sau GROUP BY thì sẽ chỉ dùng được HAVING còn WHERE không dùng được sau GROUP BY.

Cú pháp sử dụng HAVING trong SQL

Vị trí của mệnh đề HAVING trong một truy vấn SQL như sau:

SELECT FROM WHERE GROUP BY HAVING ORDER BY

Lưu ý: Mệnh đề HAVING phải theo sau mệnh đề GROUP BY trong một truy vấn và đặt trước mệnh đề ORDER BY nếu được sử dụng.

Dưới đây là cú pháp của lệnh SELECT bao gồm mệnh đề HAVING:

SELECT cot1, cot2 FROM bang1, bang2 WHERE [ dieu_kien ] GROUP BY cot1, cot2 HAVING [ dieu_kien ] ORDER BY cot1, cot2

Ví dụ về HAVING trong SQL

Giả sử bảng NHANVIEN có các bản ghi như sau:

 +----+----------+-----+-----------+----------+
 | ID | TEN      |TUOI | DIACHI    | LUONG    |
 +----+----------+-----+-----------+----------+
 |  1 | Thanh    |  32 | Haiphong  |  2000.00 |
 |  2 | Loan     |  25 | Hanoi     |  1500.00 |
 |  3 | Nga      |  23 | Hanam     |  2000.00 |
 |  4 | Manh     |  25 | Hue       |  6500.00 |
 |  5 | Huy      |  27 | Hatinh    |  8500.00 |
 |  6 | Cao      |  22 | HCM       |  4500.00 |
 |  7 | Lam      |  24 | Hanoi     | 10000.00 |
 +----+----------+-----+-----------+----------+

Để hiển thị bản ghi có độ tuổi xuất hiện lớn hơn hoặc bằng 2 lần, ta chạy lệnh như sau:

SQL > SELECT ID, TEN, TUOI, DIACHI, LUONG FROM NHANVIEN GROUP BY tuoi HAVING COUNT(tuoi) >= 2;

Kết quả trả về là:

 +----+----------+-----+-----------+----------+
 | ID | TEN      |TUOI | DIACHI    | LUONG    |
 +----+----------+-----+-----------+----------+
 |  2 | Loan     |  25 | Hanoi     |  1500.00 |
 +----+----------+-----+-----------+----------+