So sánh where và having trong sql

sự khác nhau giữa WHERE và HAVING

programming
sql
cuong.tran [Trần Xuân Cường] March 7, 2016, 2:43am #1

ai có thể giải thích cho em biết sự khác nhau giữa WHERE và HAVING trong SQL được không, em vẫn chưa rõ lắm.
liệu sau GROUP BY có dùng WHERE được không và vì sao?

2 Likes
Phan_Hoang [Phan Hoàng] March 7, 2016, 5:09am #2

Dùng được chứ.

WHERE - filter kết quả theo dòng
HAVING - filter kết quả theo GROUP

Ví dụ: bạn có 1 bảng như sau [3 trường student, subject, mark nhé]
A, math, 8
A, physics, 5
B, math, 4
C, physics, 9

Câu lệnh: SELECT student, sum[mark] from math GROUP BY student, nó sẽ ra
A, 13 [nó kiếm student giống nhau, ở đây 2 dòng đều có A nên lấy SUM]
B, 4
C, 9

Câu lệnh: SELECT student, sum[mark] from math WHERE mark > 5 GROUP BY student, nó sẽ ra
A, 8
C, 9
nó sẽ check WHERE từng dòng trước, sau đó mới GROUP BY

Câu lệnh: SELECT student, sum[mark] as s from math WHERE mark > 5 GROUP BY student HAVING s>8, nó sẽ ra
C,9
HAVING thì mới dùng với các điều kiện của cả nhóm [GROUP] như max, sum, count, … được [gọi là các hàm tổng hợp [AGGREGATE function] được define trên 1 tập hợp]

Chú ý: WHERE phải trước GROUP BY nhé.

7 Likes
tuancoi2506 [Phạm Hoàng Tuấn] March 7, 2016, 3:51am #3

Bạn ở trên nói đúng rồi, mình tóm tắt lại là Where thường dùng để tìm điều kiện cho thuộc tính của Bảng, còn Having thường dùng để tìm điều kiện trên các Function [SUM,AVG,COUNT…] trên các thuộc tính của Bảng.

6 Likes
Yoshimin [Min Jsa] March 7, 2016, 1:56pm #4

Where : Là câu lệnh điều kiện trả kết quả đối chiếu với từng dòng .
Having : Là câu lệnh điều kiện trả kết quả đối chiếu cho nhóm [Sum,AVG,COUNT,…]

Vì vậy mà sau GROUP BY thì sẽ chỉ dùng được Having .
còn Where thì KHÔNG dùng được sau GROUP BY đâu nhé. bạn cứ cmd thì biết liền ý mà.

[HAVING có thể thay thế vị trí dùng cho WHERE. nhưng . ngược lại WHERE thì KHÔNG thể thay thế vị trí cho HAVING nhé bạn]

1 Like

Sự khác biệt giữa HAVING và WHERE là gì?

Dương Thái Huy · Dương Thái Huy 16:46 13/11/2008
6 giờ trước

Tôi phải đi theo hướng sai hoặc tôi đang có một khoảnh khắc ngu ngốc.

Sự khác biệt giữa HAVINGvà WHEREtrong một SQL SELECTtuyên bố là gì?

EDIT: Tôi đã đánh dấu câu trả lời của Steven là câu trả lời đúng vì nó chứa bit thông tin chính trên liên kết:

Khi GROUP BYkhông được sử dụng, HAVINGhành xử như một WHEREmệnh đề

Tình huống tôi đã thấy WHEREtrong không có GROUP BYvà là nơi sự nhầm lẫn của tôi bắt đầu. Tất nhiên, cho đến khi bạn biết điều này, bạn không thể chỉ định nó trong câu hỏi.

Rất cám ơn cho tất cả các câu trả lời đã được khai sáng.

  • sql
  • where
  • having
246 hữu ích 2 bình luận 303k xem chia sẻ

NộI Dung:

  • Biểu đồ so sánh
  • Định nghĩa mệnh đề Where
  • Định nghĩa của Mệnh đề Có
  • Phần kết luận

Mệnh đề WHERE và HAVING chủ yếu được sử dụng trong câu lệnh truy vấn SQL, chúng cho phép chúng ta hạn chế sự kết hợp trong quan hệ kết quả thông qua việc sử dụng một vị từ cụ thể. Sự khác biệt chính giữa WHERE và HAVING là mệnh đề WHERE xác định các điều kiện để chọn bộ giá trị [hàng] từ các mối quan hệ, bao gồm cả các điều kiện tham gia nếu cần. Mặt khác, mệnh đề HAVING chỉ định một điều kiện về các nhóm được chọn thay vì trên từng bộ giá trị.

SQL viết tắt của Structured Query Language; nó là ngôn ngữ cơ sở dữ liệu khai báo hoặc toàn diện được sử dụng để truy cập dữ liệu từ cơ sở dữ liệu.

Sự khác biệt giữa mệnh đề where và have trong SQL

Dữ liệu quan trọng đối với mọi tổ chức. Vì vậy, cần phải lưu trữ dữ liệu một cách có tổ chức để truy xuất chúng. Dữ liệu được lưu trữ trong các bảng. Cơ ở dữ liệu bao gồm một

Sự khác biệt giữa mệnh đề ở đâu và có trong SQL

  • 2019

Mệnh đề WHERE và HAVING chủ yếu được sử dụng trong câu lệnh của các truy vấn SQL, chúng cho phép chúng ta hạn chế sự kết hợp trong mối quan hệ kết quả thông qua việc sử dụng một vị từ cụ thể. Sự khác biệt chính giữa WHERE và HAVING là mệnh đề WHERE chỉ định các điều kiện để chọn các bộ dữ liệu [hàng] từ các mối quan hệ, bao gồm cả các điều kiện nối nếu cần. Mặt khác, mệnh đề HAVING chỉ định một điều kiện trên các nhóm được chọn thay vì trên các bộ dữ liệu riêng lẻ.

SQL là viết tắt của Ngôn ngữ truy vấn có cấu trúc ; nó là ngôn ngữ cơ sở dữ liệu toàn diện hoặc khai báo được sử dụng để truy cập dữ liệu từ cơ sở dữ liệu.

Biểu đồ so sánh

Cơ sở để so sánhỞ ĐÂUĐANG CÓ
Căn bảnThực hiện trong các hoạt động hàng.Thực hiện trong các hoạt động cột.
Áp dụng choHàng đơnTóm tắt hàng hoặc nhóm.
Tìm nạp dữ liệuNó chỉ lấy dữ liệu cụ thể từ các hàng cụ thể theo điều kiện.Lúc đầu, dữ liệu hoàn chỉnh được tìm nạp sau đó được phân tách theo điều kiện.
Chức năng tổng hợpKhông thể xuất hiện trong mệnh đề WHERE.Có thể xuất hiện trong mệnh đề HAVING.
Được sử dụng vớiCHỌN và các câu lệnh khác như CẬP NHẬT, XÓA hoặc một trong số chúng.Không thể được sử dụng mà không có câu lệnh CHỌN.
Hành động nhưBộ lọc trướcBộ lọc sau
NHÓM THEOĐến sau WHERE.Đến sau khi có.

Định nghĩa mệnh đề ở đâu

Mệnh đề WHERE của SQL được sử dụng để mô tả một điều kiện tại thời điểm truy xuất dữ liệu từ một bảng hoặc bằng cách nối với nhiều bảng. Nó chỉ trả về giá trị cụ thể từ bảng nếu điều kiện đã cho được thỏa mãn. Mệnh đề WHERE được sử dụng để thẩm thấu các bản ghi và chỉ truy xuất các bản ghi cần thiết.

SQL cũng thực hiện các kết nối logic , hoặc không trong mệnh đề WHERE còn được gọi là điều kiện boolean ; điều kiện phải đúng để lấy các bộ dữ liệu. Các toán hạng của các biểu thức kết nối logic liên quan đến các toán tử so sánh, chẳng hạn như =, = và . Các toán tử so sánh này so sánh các chuỗi và biểu thức số học. Nó có thể được sử dụng trong câu lệnh CHỌN, cũng như trong các câu lệnh CẬP NHẬT, XÓA .

Hãy lấy một ví dụ. Bảng hiển thị bên dưới có tên là bảng ' Bán hàng ' bao gồm các thuộc tính ' Sản phẩm ' và ' Sales_amount '.

Truy vấn sau đây sẽ được viết để tính Total_sales của điện thoại và loa.

CHỌN Sản phẩm, tổng [Sales_amount] NHƯ Total_sales TỪ Doanh số WHERE Sản phẩm trong ['Điện thoại', 'Loa'] NHÓM THEO Sản phẩm;

Đầu ra sau là đầu ra kết quả trong đó các hàng được lọc trước, các hàng điện thoại và loa được lấy ra sau đó chức năng tổng hợp được thực hiện.

Định nghĩa có khoản

SQL cung cấp mệnh đề HAVING có thể được sử dụng cùng với mệnh đề GROUP BY . Điều khoản HAVING này giúp lấy các giá trị cho các nhóm đáp ứng các điều kiện nhất định. Mệnh đề WHERE cũng có thể sử dụng kết hợp với mệnh đề HAVING trong quá trình lựa chọn, mệnh đề WHERE lọc hàng riêng lẻ. Các hàng sau đó được nhóm lại và các phép tính tổng hợp được thực hiện, tại mệnh đề HAVING cuối cùng lọc các nhóm.

Nó hoạt động giống như WHERE khi từ khóa GROUP BY không được sử dụng. Các hàm Nhóm như min, max, avg, sum và Count chỉ có thể xuất hiện trong hai mệnh đề: mệnh đề SELECT và HAVING. Nó cung cấp một điều kiện trên các bộ dữ liệu tương ứng với từng giá trị trong nhóm các thuộc tính. Tập hợp duy nhất của các bản ghi thỏa mãn điều kiện sẽ được hiển thị như là kết quả.

Ở đây, chúng tôi cũng lấy ví dụ tương tự như mệnh đề WHERE và xem xét cùng bảng ' Bán hàng '. Khi chúng tôi muốn tính Total_sales của điện thoại và loa bằng mệnh đề HAVING, chúng tôi sẽ viết truy vấn sau.

CHỌN Sản phẩm, tổng [Sales_amount] NHƯ Total_sales TỪ NHÓM BÁN HÀNG THEO Sản phẩm CÓ sản phẩm trong ['phone', 'Loa'];

Truy vấn tạo ra đầu ra sau trong đó các sản phẩm được truy xuất trước, sau đó hàm tổng hợp [tổng] được thực hiện và tại các nhóm cuối cùng được lọc không giống như mệnh đề WHERE.

Khi chúng tôi chỉ muốn tìm những sản phẩm có Total_sales lớn hơn 1000. Truy vấn có thể được viết là:

CHỌN Sản phẩm, tổng [Sales_amount] NHƯ Total_sales TỪ NHÓM BÁN HÀNG THEO Tổng sản phẩm CÓ [Sales_amount]> 1000;

Sản lượng được sản xuất là:

Điều này không thể được thực hiện bằng cách sử dụng mệnh đề WHERE mặc dù có HAVING và nó tạo ra một thông báo lỗi vì mệnh đề WHERE không thể được sử dụng với các hàm tổng hợp.

Cám ơn bạn rất nhiều

Mình cám ơn sự giúp đỡ chân thành của bạn. Mong được sự hổ trợ lẫn nhau để cùng nâng cao kiến thức về Database.

Thân,

  • Registered User
    Phức tạp quá. Theo tôi cứ lấy ví dụ ra trình bày cho dễ hiểu
    Ví dụ câu lệnh:
    SELECT Stt, COUNT[Stt] AS Tan_Xuat,
    SUM[So_Luong] AS So_Luong, MAX[Dien_Giai] AS Noi_Dung
    FROM TblA WHERE Stt ''
    GROUP BY Stt
    HAVING Tan_Xuat > 1

    WHERE là điều kiện lọc sơ bộ ban đầu. Các Column trong WHERE phải có trong bảng TblA, không thể WHERE Tan_Xuat > 1

    HAVING là điều kiện lọc trên bảng ảo sau khi nhóm lệnh
    SELECT Stt ...GROUP BY Stt
    được thực hiện. Sau khi GROUP BY thì mới có cột Tan_Xuat, lúc đó muốn lọc tiếp với điều kiện Stt xuất hiện trên 1 lần thì HAVING Tan_Xuat > 1

    GROUP BY thì gộp các dòng có chung một giá trị nào đó [VD: Stt] lại thành 1 dòng. Với các cột không có trong GROUP BY thì phải dùng SUM, AVG, MIN, MAX để xử lý. Khi group lại thì cột Dien_Giai ko phải kiểu số nên không thể dùng SUM vì cộng lại thì chả có ý nghĩa gì nên có thể dùng MIX, MIN để chọn một giá trị đứng đầu or cuối theo sắp xếp

    GROUP BY luôn đứng sau WHERE [nếu có], còn HAVING luôn đứng sau GROUP BY

    [Theo kinh nghiệm của tôi thì thế thôi, chưa đọc qua giáo trình nào nên cũng không rõ có gì hiểu sai hay thiếu ko]

  • Registered User
    Rất cám ơn sự trợ giúp của các anh chị. Hy vọng có thể cùng nhau hổ trợ lẫn nhau để nâng cao kiến thức. Thanhks
  • Registered User
    Theo ý hiểu của mình:

    ------------------------------
    # Cách sử dụng GROUP BY như trên các bạn đã nói, nhưng đảm bảo 2 điều kiện sau thì lệnh sẽ ko bị lỗi:

    1] Các cột [trường] có trong SELECT thì phải có trong GROUP BY.
    Ví dụ: SELECT Ten_NV, Gio_lam FROM ThongTin GROUP BY Ten_NV, Gio_lam

    2] Nếu ko thì phải có hàm tập hợp.
    Ví dụ: SELECT Ten_NV, SUM[Gio_lam] FROM ThongTin GROUP BY Ten_NV

    # Sự khác nhau giữa HAVING và WHERE :

    ++ WHERE đứng trước GROUP BY cũng hiểu là điều kiện sau đó mới nhóm lại. [Và WHERE ko sử dụng đc với các hàm tập hợp như SUM, AVG, POWER,....]
    ++ HAVING đứng sau GROUP BY có thể hiểu là nhóm kết quả lại sau đó mới điều kiện để lọc kết quả.[Với HAVING sử dụng y như WHERE và điều kiện có thể dùng hàm tập hợp]

  • Quy định

    • Bạn không thể tạo chủ đề mới
    • Bạn không thể trả lời bài viết
    • Bạn không thể gửi file đính kèm
    • Bạn không thể sửa bài viết của mình

    Quy định DDTH.com

    Video liên quan

    Chủ Đề