Để tận dụng sức mạnh tuyệt vời của SQL, bạn phải hiểu mệnh đề HAVING so với WHERE. Làm thế nào để bạn sử dụng chúng? Sự khác biệt của chúng là gì?
Bạn đang xem : sql mệnh đề where và have
Bài viết này viết về mệnh đề WHERE và HAVING của SQL. Cả hai mệnh đề đều là một phần của nền tảng của lệnh SQL SELECT. Chúng có cách sử dụng tương tự nhau, nhưng cũng có những điểm khác biệt quan trọng mà mọi người sử dụng SQL nên biết. Hãy xem điều gì đằng sau cuộc tranh luận HAVING và WHERE.
Trong bài viết này, chúng tôi giả sử chúng tôi làm việc cho một cơ quan xã hội của chính phủ hỗ trợ những người hoặc gia đình có thu nhập dưới một ngưỡng nhất định. Cơ quan này sử dụng một số chỉ số để xác định những người hoặc gia đình cần trợ giúp.
Đầu tiên, hãy xem tập dữ liệu mẫu. Sau đó, trong phần còn lại của bài viết, chúng tôi sẽ tạo các truy vấn dựa trên tập dữ liệu này.
Tập dữ liệu mẫu
Bộ dữ liệu này mô tả những người thuộc bốn gia đình sống ở hai thành phố. Vì lợi ích đơn giản, chúng tôi sẽ giả định rằng last_name
xác định họ. Ý tưởng là để có được các chỉ số ở cấp độ cá nhân và cấp độ gia đình.
BẢNG
Người
namelast_namebirth_dateyear_incomecity
MaryRoberts1964-01-1178000Oklahoma
PeterRoberts1962-09-2586500Oklahoma
JohnRoberts1999-06-030Oklahoma
SueRoberts1996-03-060Oklahoma
MelindaRoberts1998-04-040Oklahoma
GeorgeHudson1953-02-2348000Oklahoma
NancyHudson1958-12-0665000Oklahoma
AnnHudson1979-04-0235000Oklahoma
CarlGibson1963-04-03102800Phoenix
LiGibson1963-12-2796000Phoenix
KateBishop1994-07-10920000Phoenix
MarkBishop2018–9-130Phoenix
Được rồi. Bây giờ chúng ta đã thấy tập dữ liệu, hãy bắt đầu!
WHERE và HAVING: Các ví dụ đơn giản
Nói cách đơn giản, mệnh đề WHERE và HAVING hoạt động như bộ lọc; họ xóa các bản ghi hoặc dữ liệu không đáp ứng các tiêu chí nhất định khỏi kết quả cuối cùng của một truy vấn. Tuy nhiên, chúng được áp dụng cho các bộ dữ liệu khác nhau. Đó là điểm quan trọng cần hiểu về WHERE so với HAVING: WHERE lọc ở cấp bản ghi, trong khi HAVING lọc ở cấp “nhóm bản ghi”.
Hãy xem một số ví dụ.
Đây là một truy vấn mẫu sử dụng mệnh đề WHERE: Giả sử chúng ta muốn lấy tên của những người có thu nhập hàng năm lớn hơn 100.000 đô la. Chúng tôi cần lọc (hoặc loại bỏ) ở cấp bản ghi, vì vậy chúng tôi sẽ sử dụng mệnh đề WHERE thay vì mệnh đề HAVING cho truy vấn này:
Văn bản truy vấn cho mục đích sao chép-dán:
CHỌN tên, last_name TỪ người WHERE year_income & gt; 100000;
Bây giờ, hãy thử truy vấn tương tự, nhưng lần này với mệnh đề HAVING: Giả sử chúng ta muốn lấy last_name
của các họ có thu nhập hộ gia đình (tức là tổng thu nhập của tất cả các thành viên trong gia đình) trên 100.000 đô la. Đây là một trường hợp rõ ràng cho việc sử dụng mệnh đề HAVING, vì chúng tôi không cần lọc theo bản ghi. (Chúng tôi sẽ không loại bỏ hồ sơ của một người vì họ kiếm được ít hơn 100.000 đô la.) Ý tưởng là lọc dựa trên thu nhập của gia đình, vì vậy chúng tôi cần nhóm mọi người theo last_name
và sử dụng HAVING để lọc các nhóm của những người, như được hiển thị bên dưới:
Văn bản truy vấn cho mục đích sao chép-dán:
CHỌN last_name, SUM (year_income) AS "family_income" TỪ người GROUP BY last_name HAVING SUM (year_income) & gt; 100000;
CÁC YÊU CẦU CÓ YÊU CẦU CỦA COMPLEX
Chúng ta có thể sử dụng nhiều hàm tổng hợp như chúng ta muốn trong điều kiện của mệnh đề HAVING. Hãy đi xa hơn với phân tích của chúng tôi về thu nhập gia đình và tính toán thu nhập trung bình trên mỗi thành viên cho mỗi gia đình. Chúng tôi muốn xác định những gia đình có thu nhập dưới 50.000 mỗi người. Từ quan điểm kinh tế, phân tích này có thể cho thấy nhiều hơn về thu nhập của gia đình so với phân tích trước. Đây là câu hỏi:
Văn bản truy vấn cho mục đích sao chép-dán:
CHỌN last_name, COUNT (*) là "thành viên", SUM (year_income) là "family_income", SUM (year_income) / COUNT (*) là "per_member_income" TỪ người GROUP BY last_name HAVING SUM (year_income) / COUNT (*) & lt; 50000;
Lưu ý: Mệnh đề HAVING có một số hạn chế; một trong số đó là các cột mức bản ghi trong điều kiện HAVING cũng phải xuất hiện trong mệnh đề GROUP BY.
Sử dụng WHERE và HAVING trong cùng một truy vấn SQL
Rất phổ biến khi sử dụng WHERE và HAVING trong cùng một truy vấn. Hãy thực hiện một truy vấn để biết tổng thu nhập của gia đình và thu nhập trên mỗi thành viên đối với các gia đình ở Oklahoma có hơn bốn thành viên:
Văn bản truy vấn cho mục đích sao chép-dán:
CHỌN last_name, COUNT (*) là "thành viên", SUM (year_income) là "family_income", SUM (year_income) / COUNT (*) là "per_member_income" TỪ người WHERE city = ‘Oklahoma’ GROUP BY last_name CÓ ĐẾM (*) & gt; 4;
Ở ĐÂU và CÓ trong các truy vấn phức tạp
Để kết thúc bài viết, chúng tôi sẽ xây dựng một truy vấn trả về các gia đình có thu nhập hộ gia đình thấp hơn thu nhập trung bình ở các thành phố của họ. Phần khó khăn là truy vấn con thu được thu nhập trung bình cho một thành phố nhất định. Xin lưu ý rằng chúng tôi sử dụng một truy vấn khác vì đây là thu nhập trung bình trên mỗi thành phố; nó không dựa trên số lượng thành viên trong mỗi gia đình, mà dựa trên số lượng gia đình trong thành phố đó, như được tính bằng số lượng (tên cuối cùng riêng biệt)
.
Văn bản truy vấn cho mục đích sao chép-dán:
LỰA CHỌN họ, COUNT (*) NHƯ "thành viên", SUM (year_income) NHƯ "family_income", SUM (year_income) / COUNT (*) AS "per_member_income" TỪ những người p GROUP BY last_name HAVING SUM (year_income) & lt; ( LỰA CHỌN SUM (year_income) / COUNT (last_name riêng biệt) TỪ người WHERE city = p.city );
Đã giải quyết: Ở đâu so với CÓ trong SQL
Chúng tôi đã xem xét một số truy vấn khác nhau sử dụng mệnh đề WHERE và HAVING của SQL. Như chúng tôi đã đề cập, cả hai mệnh đề đều hoạt động như bộ lọc, nhưng mỗi mệnh đề áp dụng cho một cấp dữ liệu khác nhau. Mệnh đề WHERE lọc ở cấp bản ghi, trong khi mệnh đề HAVING lọc ở cấp nhóm.
SQL là một ngôn ngữ siêu linh hoạt và bạn có thể tạo hàng triệu kết hợp bằng cách sử dụng mệnh đề WHERE và HAVING. Tại thời điểm này, tôi muốn đề cập đến một khóa học tuyệt vời liên quan đến các chủ đề trong bài viết này: Tạo báo cáo SQL cơ bản trong SQL của LearnSQL. Nó mang lại lợi ích cho những người biết cơ bản về SQL và muốn cải thiện kỹ năng của họ trong việc tạo bằng cách sử dụng các báo cáo SQL có ý nghĩa. Tiến xa hơn – khám phá SQL!
Xem thêm những thông tin liên quan đến chủ đề sql mệnh đề where và có
Difference between where and having in sql server
- Tác giả: kudvenkat
- Ngày đăng: 2015-09-15
- Đánh giá: 4 ⭐ ( 6554 lượt đánh giá )
- Khớp với kết quả tìm kiếm: sql server where vs having
sql server group by where having
group by having sql serverIn this vide we will discuss the difference between where and having caluses in sql server.
Healthy diet is very important both for the body and mind. If you like Aarvi Kitchen recipes, please support by sharing, subscribing and liking our YouTube channel. Hope you can help.
https://www.youtube.com/channel/UC7sEwIXM_YfAMyonQCrGfWA/?sub_confirmation=1Let us understand the difference with an example.
To calculate total sales by product, we would write a GROUP BY query as shown below
SELECT Product, SUM(SaleAmount) AS TotalSales
FROM Sales
GROUP BY ProductNow if we want to find only those products where the total sales amount is greater than $1000, we will use HAVING clause to filter products
SELECT Product, SUM(SaleAmount) AS TotalSales
FROM Sales
GROUP BY Product
HAVING SUM(SaleAmount) ] 1000If we use WHERE clause instead of HAVING clause, we will get a syntax error. This is because the WHERE clause doesn’t work with aggregate functions like sum, min, max, avg, etc.
SELECT Product, SUM(SaleAmount) AS TotalSales
FROM Sales
GROUP BY Product
WHERE SUM(SaleAmount) ] 1000So in short, the difference is WHERE clause cannot be used with aggregates where as HAVING can.
However, there are other differences as well that we need to keep in mind when using WHERE and HAVING clauses. WHERE clause filters rows before aggregate calculations are performed where as HAVING clause filters rows after aggregate calculations are performed. Let us understand this with an example.
Total sales of iPhone and Speakers can be calculated by using either WHERE or HAVING clause
Calculate Total sales of iPhone and Speakers using WHERE clause : In this example the WHERE clause retrieves only iPhone and Speaker products and then performs the sum.
SELECT Product, SUM(SaleAmount) AS TotalSales
FROM Sales
WHERE Product in (‘iPhone’, ‘Speakers’)
GROUP BY ProductCalculate Total sales of iPhone and Speakers using HAVING clause : This example retrieves all rows from Sales table, performs the sum and then removes all products except iPhone and Speakers.
SELECT Product, SUM(SaleAmount) AS TotalSales
FROM Sales
GROUP BY Product
HAVING Product in (‘iPhone’, ‘Speakers’)So from a performance standpoint, HAVING is slower than WHERE and should be avoided when possible.
Another difference is WHERE comes before GROUP BY and HAVING comes after GROUP BY.
Difference between WHERE and Having
1. WHERE clause cannot be used with aggregates where as HAVING can. This means WHERE clause is used for filtering individual rows where as HAVING clause is used to filter groups.
2. WHERE comes before GROUP BY. This means WHERE clause filters rows before aggregate calculations are performed. HAVING comes after GROUP BY. This means HAVING clause filters rows after aggregate calculations are performed. So from a performance standpoint, HAVING is slower than WHERE and should be avoided when possible.
3. WHERE and HAVING can be used together in a SELECT query. In this case WHERE clause is applied first to filter individual rows. The rows are then grouped and aggregate calculations are performed, and then the HAVING clause filters the groups.Text version of the video
http://csharp-video-tutorials.blogspot.com/2015/09/difference-between-where-and-having-in.htmlSlides
http://csharp-video-tutorials.blogspot.com/2015/09/difference-between-where-and-having-in_15.htmlAll SQL Server Text Articles
http://csharp-video-tutorials.blogspot.com/p/free-sql-server-video-tutorials-for.htmlAll SQL Server Slides
http://csharp-video-tutorials.blogspot.com/p/sql-server.htmlFull SQL Server Course
https://www.youtube.com/playlist?list=PL4cyC4G0M1RQ_Rm52cQ4CcOJ_T_HXeMB4All Dot Net and SQL Server Tutorials in English
https://www.youtube.com/user/kudvenkat/playlists?view=1&sort=ddAll Dot Net and SQL Server Tutorials in Arabic
https://www.youtube.com/c/KudvenkatArabic/playlists
SO SÁNH MỆNH ĐỀ WHERE VÀ HAVING TRONG SQL »
- Tác giả: inda.vn
- Đánh giá: 3 ⭐ ( 8512 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Trong ngôn ngữ truy vấn SQL, mệnh đề WHERE và HAVING được sử dụng rất nhiều. 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.
Mệnh đề lọc dữ liệu theo điều kiện
- Tác giả: kienit.com
- Đánh giá: 5 ⭐ ( 3746 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Mệnh đề WHERE trong SQL dùng để lọc dữ liệu theo điều kiện cho sẵn. Trong câu lệnh SELECT có điều kiện thì WHERE nằm sau mệnh đề FROM.
Mệnh đề WHERE trong SQL
- Tác giả: viettuts.vn
- Đánh giá: 5 ⭐ ( 2240 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Mệnh đề WHERE trong SQL được sử dụng để chỉ định một điều kiện trong khi lấy dữ liệu từ một bảng hoặc bằng cách join với nhiều bảng. Nếu điều kiện thỏa mãn,
SQL Server: Các lệnh lọc dữ liệu trong SQL Server
- Tác giả: comdy.vn
- Đánh giá: 5 ⭐ ( 4542 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Trong hướng dẫn này, bạn sẽ học cách sử dụng lệnh DISTINCT, WHERE, AND, OR, IN, BETWEEN và LIKE trong SQL Server để lọc dữ liệu trả về.
[MySQL 08] SELECT và mệnh đề WHERE: AND, OR, IN, NOT IN
- Tác giả: www.codelean.vn
- Đánh giá: 5 ⭐ ( 5137 lượt đánh giá )
- Khớp với kết quả tìm kiếm: CodeLean.vn là nơi chia sẻ kiến thức của những người học, làm và dạy trong lĩnh vực công nghệ thông tin.
Mệnh đề WHERE trong SQL, cú pháp và cách sử dụng
- Tác giả: thuthuat.taimienphi.vn
- Đánh giá: 4 ⭐ ( 4828 lượt đánh giá )
- Khớp với kết quả tìm kiếm: menh de WHERE trong SQL , Mệnh đề WHERE trong SQL, cú pháp và cách sử dụng
Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình