Mệnh đề HAVING trong SQL Server
Having trong SQL là gì? Bạn đã biết cách dùng Group by having trong SQL chưa? Hãy cùng Quantrimang.com tìm hiểu nhé!
Trong SQL Server, mệnh đề Having bao gồm một hoặc nhiều điều kiện phải là TRUE đối với các nhóm bản ghi. Nó giống như mệnh đề Where của Group by. Điểm khác biệt duy nhất ở đây là mệnh đề Where không thể được dùng với các hàm tổng hợp nhưng mệnh đề Having thì ngược lại. Mệnh đề Having luôn đi sau Group by và trước Order by.
Cú pháp mệnh đề HAVING trong SQL Server
SELECT bieuthuc1, bieuthuc2, … bieuthuc_n,
ham_tong (bieuthuc)
FROM bang
[WHERE dieukien]
GROUP BY bieuthuc1, bieuthuc2, … bieuthuc_n
HAVING dieukie
n_having;
Tên biến hoặc giá trị biến
ham_tong
Có thể là các hàm như SUM, COUNT, MIN, MAX hoặc AVG.
bieuthuc1, bieuthuc2, … bieuthuc_n
Biểu thức không nằm bên trong hàm tổng và phải nằm trong mệnh đề GROUP BY.
WHERE dieukien
Tùy chọn. Các điều kiện mà bản ghi phải đáp ứng để được chọn.
HAVING dieukien_having
Đây là điều kiện thêm chỉ áp dụng với kết quả tổng để giới hạn các nhóm của những hàng được trả về. Chỉ các nhóm mà điều kiện được đánh giá là TRUE mới nằm trong bộ kết quả.
Ví dụ - dùng hàm SUM
SELECT bophan, SUM(soluong) AS “Tong so luong”
FROM sanpham
GROUP BY bophan
HAVING SUM (soluong) > 1
00;
Ví dụ về mệnh đề HAVING ở trên dùng hàm SUM để trả về tên của bộ phận và tổng số lượng (trong bộ phận liên quan). Mệnh đề HAVING sẽ lọc kết quả để chỉ các bộ phận có số lượng lớn hơn 100 được trả về.
Ví dụ - dùng hàm COUNT
SELECT thanhpho, COUNT (*) AS “So nhanvien”
FROM nhanvien
WHERE bang = ‘California’
GROUP BY thanhpho
HAVING COUN
T (*) > 20;
Ví dụ này trả về thành phố và số nhân viên (ở thành phố đó) hiện đang ở bang California. Mệnh đề HAVING sẽ lọc để chỉ trả về các thành phố có nhiều hơn 20 nhân viên.
Ví dụ - dùng hàm MIN
SELECTbophan, MIN (luong) AS “Luong thap nhat”
FROM nhanvien
GROUP BY bophan
HAVING MIN
(luong) >= 50000;
Ở ví dụ này, kết quả trả về là tên của mỗi bộ phận và số lương tối thiểu trong từng bộ phận. Mệnh đề HAVING sẽ chỉ trả về các bộ phận có lương tối thiểu lớn hơn hoặc bằng $50.000.
Ví dụ - dùng hàm MAX
SELECT ho, MAX (luong) AS “Luong cao nhat”
FROM nhanvien
GROUP BY bophan
HAVING MA
X (luong) > 34000;
Trong ví dụ cuối cùng này, kết quả trả về là họ của nhân viên và số lương tối đa cho giá trị họ đó. Mệnh đề HAVING giới hạn chỉ trả về các giá trị họ có lương tối đa lớn hơn $34.000.
Ví dụ - dùng hàm AVG()
Lệnh sau tìm các danh mục sản phẩm có giá niêm yết trung bình nằm trong khoảng từ 500 tới 1.000:
SELECT
category_id,
AVG (list_price) avg_list_price
FROM
production.products
GROUP BY
category_id
HAVING
AVG (list_price) Giữa 500 và 1000;
Tóm lại, những điều cần lưu ý khi dùng mệnh đề Having trong SQL Server:
- Mệnh đề Having được dùng để lọc các bản ghi theo nhóm.
- Mệnh đề Having phải đi sau Group by và trước Order by.
- Mệnh đề Having có thể bao gồm một hoặc nhiều điều kiện.
- Điều kiện Having chỉ có thể bao gồm các cột được dùng với mệnh đề Group by. Để dùng các cột khác trong điều kiện Having, dùng hàm tổng hợp cùng với chúng.
Sự khác biệt giữa mệnh đề WHERE và mệnh đề HAVing trong SQL Server
Sự khác biệt giữa hai mệnh đề WHERE và Having trong database là câu hỏi thường xuất hiện nhiều nhất trong các buổi phỏng vấn.
Bảng sau sẽ tổng kết sự khác biệt giữa hai mệnh đề này trong SQL Server. Tuy nhiên, điểm khác biệt chính ở đây là mệnh đề WHERE dùng điều kiện để lọc các bản ghi trước khi tạo nhóm bất kỳ, còn HAVING dùng điều kiện để lọc giá trị từ một nhóm.
HAVING | WHERE |
Mệnh đề HAVING được dùng trong hệ thống database để tìm nạp dữ liệu/giá trị từ các nhóm theo điều kiện được cung cấp. | Mệnh đề WHERE được dùng trong hệ thống database để tìm nạp dữ liệu/giá trị từ các bảng theo điều kiện được cung cấp. |
Mệnh đề HAVING luôn được triển khai cùng với lệnh GROUP BY. | Mệnh đề WHERE có thể chạy mà không cần GROUP BY. |
Mệnh đề HAVING có thể bao gồm các mệnh đề tổng hợp SQL trong một truy vấn hoặc câu lệnh. | Không thể dùng hàm tổng hợp trong SQL Server với mệnh đề WHERE trong các câu lệnh. |
Chỉ có thể dùng lệnh SELECT với mệnh đề HAVING để lọc các bản ghi. | Dễ dàng dùng mệnh đề WHERE với UPDATE, DELETE và SELECT. |
Mệnh đề HAVING được dùng trong truy vấn SQL sau lệnh GROUP BY. | Mệnh đề WHERE luôn được dùng trước GROUP BY trong truy vấn SQL. |
Có thể triển khai mệnh đề SQL Server này trong các hoạt động cột. | Có thể triển khai mệnh đề SQL này trong các hoạt động ở hàng. |
Nó là một bộ lọc sau. | Nó là một bộ lọc trước. |
Nó được dùng để lọc nhóm. | Được dùng để lọc từng bản ghi trong bảng. |
Bài trước: Mệnh đề GROUP BY trong SQL Server
Bài sau: Lệnh SELECT TOP trong SQL Server

Bạn nên đọc
