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 tài 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 .

where-va-having-trong-sql

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_lists
From table_name
WHERE conditions
Group by column_lists
  • Ví dụ: Bảng khach_hang
CustomerID Gender City SalesAmount
1 Nam Hà Nội 200.000
2 Nam Hồ Chí Minh 315.000
3 Nữ Hà Nội 160.000
4 Nữ Hà Nội 120.000
5 Nam Hồ Chí Minh 125.000
6 Nữ Đà Nẵng 185.000
7 Nam Đà Nẵng 316.000
8 Nữ Hải Phòng 295.000

Khi triển khai truy vấn :

Select CustomerID, Gender, City, SalesAmount

From khach_hang

WHERE SalesAmount > 200000

Group by CustomerID, Gender, City

Ta được kết quả sau:

CustomerID Gender City SalesAmount
1 Nam Hà Nội 200.000
2 Nam Hồ Chí Minh 315.000
7 Nam Đà Nẵng 316.000
8 Nữ Hải Phòng 295.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_name

WHERE conditions

Group by column_lists

HAVING conditions
  • Ví dụ: Tiếp tục lấy Bảng khach_hang ở trên
CustomerID Gender City SalesAmount
1 Nam Hà Nội 200.000
2 Nam Hồ Chí Minh 315.000
3 Nữ Hà Nội 160.000
4 Nữ Hà Nội 120.000
5 Nam Hồ Chí Minh 125.000
6 Nữ Đà Nẵng 185.000
7 Nam Đà Nẵng 316.000
8 Nữ Hải Phòng 295.000

Khi thực thi truy vấn :

Select City, Sum(SalesAmount) as Total_Sales

From khach_hang

Group by City

HAVING Sum(SalesAmount) > 450000

Ta được tác dụng sau :

City Total_Sales
Hà Nội 480.000
Đà Nẵng 501.000

Phân biệt mệnh đề WHERE và HAVING trong SQL

Nội dung WHERE HAVING
Cách thức Filter Từng dòng riêng lẻ Từng nhóm
Dùng với aggregate functions Không
Dùng với các câu lệnh Select, Update, Delete Chỉ dùng với Select
Dùng với Group by Dùng trước Group by Dù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 hoàn toàn có thể đọc thêm những kỹ năng và kiến thức về Khoa học tài liệu tại : https://final-blade.com/blog/

Đọc thêm tại

https://www.javatpoint.com/where-vs-having