Mệnh đề HAVING trong SQL
Mệnh đề HAVING trong SQL 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.
1. Ý nghĩa của GROUP BY
Mệnh đề HAVING được thêm vào SQL bởi vì từ khóa WHERE không thể được sử dụng với các hàm tổng hợp.
- Cú pháp:
SELECT tên cột
FROM tên bảng
WHERE điều kiện
GROUP BY tên cột
HAVING điều kiện
ORDER BY tên cột;
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:
Tham khảo: Hướng dẫn tải và cài đặt dữ liệu mẫu Northwind trong SQL Server Management Studio
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 NumberOfOrders
FROM (Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY LastName
HAVING 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. Mong rằng những kiến thức trên sẽ hữu ích với bạn đọc, đừng quên đón xem các bài học mới nhất sẽ được cập nhật thường xuyên tại BAC’s Blog.
Nguồn tham khảo:,
https://www.w3schools.com/
Nhu cầu đào tạo doanh nghiệp
BAC là đơn vị đào tạo BA đầu tiên tại Việt Nam. Đối tác chính thức của IIBA quốc tế. Ngoài các khóa học public, BAC còn có các khóa học in house dành riêng cho từng doanh nghiệp. Chương trình được thiết kế riêng theo yêu cầu của doanh nghiệp, giúp doanh nghiệp giải quyết những khó khăn và tư vấn phát triển.
Tham khảo chương trình đào tạo:
BAC – Biên soạn và tổng hợp nội dung