So sánh mệnh đề WHERE và HAVING trong SQL
Trong ngôn ngữ truy vấn SQL, mệnh đề WHERE và HAVING được sử dụng rất nhiều. Tuy nhiên, vẫn có rất nhiều học viên bị nhầm lẫn và gặp khó khăn trong khi sử dụng 2 mệnh đề này. Bài viết dưới đây sẽ làm rõ hơn về sự khác nhau giữa WHERE và HAVING trong SQL cũng như cách sử dụng.
Bài viết được viết bởi bạn Nguyễn Thị Hằng – học viên Khóa 1, Chương trình vệ tinh “Khoa học dữ liệu trong Kinh tế và Kinh doanh”. Đây là bài thu hoạch trong môn Cơ Sở Dữ Liệu được học viên của chương trình tự tổng hợp.
Mục Lục
Mệnh đề WHERE
Trước tiên để so sánh được mệnh đề WHERE và HAVING trong SQL ta cần phải hiểu được chức năng chính của từng mệnh đề.
- Mệnh đề WHERE dùng để kiểm tra các điều kiện cho các thuộc tính của bảng, trả kết quả đối chiếu với từng dòng.
- Syntax:
Select column_listsFrom table_nameWHERE conditionsGroup by column_lists
- Ví dụ: Bảng khach_hang
CustomerIDGenderCitySalesAmount1NamHà Nội200.0002NamHồ Chí Minh315.0003NữHà Nội160.0004NữHà Nội120.0005NamHồ Chí Minh125.0006NữĐà Nẵng185.0007NamĐà Nẵng316.0008NữHải Phòng295.000
Khi thực hiện truy vấn:
Select CustomerID, Gender, City, SalesAmountFrom khach_hangWHERE SalesAmount > 200000Group by CustomerID, Gender, City
Ta được kết quả sau:
CustomerIDGenderCitySalesAmount1NamHà Nội200.0002NamHồ Chí Minh315.0007NamĐà Nẵng316.0008NữHải Phòng295.000
Mệnh đề HAVING
- Mệnh đề HAVING được dùng để giới hạn nhóm các hàng trả về trong bảng, trả kết quả đối chiếu cho các nhóm (Sum, Count, Average,…) được tạo bởi Group by.
- Mệnh đề HAVING được thêm vào SQL vì mệnh đề WHERE không thể sử dụng được với các aggregate functions.
- Có thể sử dụng mệnh đề WHERE và HAVING cùng nhau trong quá trình lựa chọn. Trong trường hợp này, đầu tiên mệnh đề WHERE lọc các hàng riêng lẻ, sau đó các hàng được nhóm lại, thực hiện các phép tính tổng hợp và cuối cùng mệnh đề HAVING lọc các nhóm.
- Symtax:
Select column_lists, aggregate_function (expression)From table_nameWHERE conditionsGroup by column_listsHAVING conditions
- Ví dụ: Tiếp tục lấy Bảng khach_hang ở trên
CustomerIDGenderCitySalesAmount1NamHà Nội200.0002NamHồ Chí Minh315.0003NữHà Nội160.0004NữHà Nội120.0005NamHồ Chí Minh125.0006NữĐà Nẵng185.0007NamĐà Nẵng316.0008NữHải Phòng295.000
Khi thực hiện truy vấn:
Select City, Sum(SalesAmount) as Total_SalesFrom khach_hangGroup by CityHAVING Sum(SalesAmount) > 450000
Ta được kết quả sau:
CityTotal_SalesHà Nội480.000Đà Nẵng501.000
Phân biệt mệnh đề WHERE và HAVING trong SQL
Nội dungWHEREHAVINGCách thức FilterTừng dòng riêng lẻTừng nhómDùng với aggregate functionsKhôngCóDùng với các câu lệnhSelect, Update, DeleteChỉ dùng với SelectDùng với Group byDùng trước Group byDùng sau Group by
Kết luận
Trong bài viết trên, tác giả đã so sánh mệnh đề WHERE và HAVING trong SQL. Cả 2 mệnh đề này đều có chức năng lọc dữ liệu, tuy nhiên vẫn có một số điểm khác biệt ở cách thức lọc, kết hợp với các câu lệnh khác. Nhìn chung mệnh đề HAVING được trang bị thêm một số tính năng mà mệnh đề WHERE không có.
Bạn có thể đọc thêm những kiến thức về Khoa học dữ liệu tại: https://datapot.vn/blog/
Đọc thêm tại
https://www.javatpoint.com/where-vs-having