Mệnh đề HAVING trong SQL Server có thể được xem là một sự thay thế cho WHERE. Nguyên nhân vì sao? Ý nghĩa và cú pháp sử dụng của HAVING như thế nào? Hãy xem tiếp ngay dưới đây.
Cú pháp mệnh đề HAVING trong SQL Server
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) > 100;
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 COUNT (*) > 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
SELECT bophan, 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 MAX (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.
2. Ví dụ HAVING
Để thực hiện ví dụ này, bạn cần nhập cơ sở dữ liệu mẫu Northwind vào SQL Server Management Studio. Hãy xem bài viết hướng dẫn ngay dưới đây:
Câu lệnh SQL dưới đây sẽ liệt kê số lượng khách hàng trong mỗi quốc gia. Chỉ bao gồm các quốc gia có nhiều hơn 5 khách hàng:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
Câu lệnh SQL dưới đây sẽ liệt kê số lượng khách hàng trong mỗi quốc gia, sắp xếp từ cao đến thấp. Chỉ bao gồm các quốc gia có nhiều hơn 5 khách hàng:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
Kết quả tương tự ví dụ trên nhưng lúc này, thứ tự các cột đã được sắp xếp từ cao đến thấp.
3. Ví dụ HAVING khác
Câu lệnh SQL dưới đây sẽ liệt kê danh sách có nhiều hơn 10 đơn đặt hàng:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrdersFROM (OrdersINNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)GROUP BY LastNameHAVING COUNT(Orders.OrderID) > 10;
Câu lệnh SQL dưới đây sẽ liệt kê nếu nhân viên có tên “Davolio” hoặc “Fuller” có nhiều hơn 25 đơn đặt hàng:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = ‘Davolio’ OR LastName = ‘Fuller’
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
Như vậy, HAVING gần như tương tự với WHERE nhưng HAVING có thể dùng với các hàm tổng hợp còn WHERE thì không. Vì thế, chúng ta thường thấy HAVING được sử dụng cùng với toán tử GROUP BY.
(Nguồn: Tổng hợp)
Hy vọng rằng bài viết trên đã giúp các bạn biết thêm nhiều kiến thức hữu ích.
Nếu như bạn đang có nhu cầu xây dựng một Website phù hợp với thương hiệu của mình, nhưng vẫn chưa tìm được giải pháp tối ưu nhất thì hãy liên hệ ngay với chúng tôi trong hôm nay để được tư vấn miễn phí nhé!
ATPWEB – XÂY DỰNG NGÔI NHÀ ONLINE
Liên hệ:
- Hotline: 0707 6666 56
- Fanpage: http://facebook.com/atpweb.vn
- Website: atpweb.vn