Để 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:

Xem Thêm  điều kiện if, else, elif (Với Ví dụ) - nếu và những con trăn khác

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.

Xem Thêm  Hộp kiểm JavaScript - giá trị js của hộp kiể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 server

    In 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=1

    Let 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 Product

    Now 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) ] 1000

    If 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) ] 1000

    So 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 Product

    Calculate 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.html

    Slides
    http://csharp-video-tutorials.blogspot.com/2015/09/difference-between-where-and-having-in_15.html

    All SQL Server Text Articles
    http://csharp-video-tutorials.blogspot.com/p/free-sql-server-video-tutorials-for.html

    All SQL Server Slides
    http://csharp-video-tutorials.blogspot.com/p/sql-server.html

    Full SQL Server Course
    https://www.youtube.com/playlist?list=PL4cyC4G0M1RQ_Rm52cQ4CcOJ_T_HXeMB4

    All Dot Net and SQL Server Tutorials in English
    https://www.youtube.com/user/kudvenkat/playlists?view=1&sort=dd

    All 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

Xem Thêm  Bộ chọn CSS - bộ chọn css là gì

By ads_php