Câu lệnh SELECT có điều kiện HAVING

Câu lệnh SQL SELECT HAVING

Giới thiệu

Trong chương này, chúng ta sẽ tìm hiểu về Câu lệnh SQL SELECT-HAVING trong SQL với nhiều tùy chọn khác nhau.

Câu lệnh SQL SELECT- HAVING  

SQL HAVING là một câu lệnh xác định điều kiện tìm kiếm cho một nhóm hoặc một tập hợp. HAVING chỉ có thể được sử dụng với câu lệnh chọn. HAVING thường được sử dụng với mệnh đề nhóm. Khi một nhóm by không được sử dụng, sẽ có một nhóm tổng hợp, đơn lẻ ngầm định.
Câu lệnh HAVING cho phép bạn chỉ định các điều kiện lọc kết quả nhóm nào xuất hiện trong kết quả.
Mệnh đề WHERE đặt điều kiện trên các cột đã chọn, trong khi mệnh đề HAVING đặt điều kiện trên các nhóm được tạo bởi mệnh đề Group By trong câu lệnh HAVING.
Việc có câu lệnh lọc các bản ghi hoạt động trên các kết quả Group By theo kết quả được tóm tắt. Câu lệnh Having áp dụng cho các bản ghi nhóm tóm tắt, trong khi Where hợp áp dụng cho các bản ghi riêng lẻ, chỉ các nhóm đáp ứng tiêu chí Having mới được trả về. Có yêu cầu rằng một mệnh đề Nhóm theo là tuyên bố hiện tại. Where và Having có thể nằm trong cùng một truy vấn trong Câu lệnh SQL.
Câu lệnh Having giống như mệnh đề Where, nhưng chỉ áp dụng cho toàn bộ nhóm (tức là cho các hàng trong tập hợp kết quả đại diện cho các nhóm), trong khi mệnh đề Where áp dụng cho các hàng riêng lẻ. Một truy vấn có thể chứa cả mệnh đề Where và mệnh đề Having trong trường hợp đó.
  • Câu lệnh Where trước tiên được áp dụng cho các hàng riêng lẻ trong bảng hoặc đối tượng có giá trị bảng trong ngăn Diagram. Chỉ những hàng đáp ứng các điều kiện trong mệnh đề Where mới được nhóm lại.

  • Câu lệnh Having sau đó được áp dụng cho các hàng trong tập hợp kết quả, chỉ những nhóm đáp ứng điều kiện Having mới xuất hiện trong đầu ra của truy vấn. Bạn chỉ có thể áp dụng mệnh đề Having cho các cột cũng xuất hiện trong câu lệnh Group By hoặc trong một hàm tổng hợp.
Mệnh đề Having đã được thêm vào SQL vì không thể sử dụng từ khóa Where với các hàm tổng hợp trong câu lệnh SQL Select.
Cú pháp
  1. SELECT column_name(s)
  2. FROM table_name
  3. WHERE condition
  4. GROUP BY column_name(s)
  5. HAVING condition
  6. ORDER BY column_name(s);

Câu lệnh SQL sau liệt kê OrderId, OrderName trong OrderDetails. Chỉ bao gồm OrderId với hơn 1 OrderDetails.

Cú pháp
  1. SELECT COUNT(OrderId), OrderName
  2. FROM OrderDetails
  3. GROUP BY OrderName
  4. HAVING COUNT(OrderId) >1;

Ví dụ

Câu lệnh SQL SELECT HAVING
Câu lệnh SQL sau đây liệt kê OrderId, OrderName trong OrderDetails, được sắp xếp từ cao xuống thấp (chỉ bao gồm OrderId có nhiều hơn 2 OrderDetails).
Cú pháp 
  1. SELECT COUNT(OrderId), OrderName
  2. FROM OrderDetails
  3. GROUP BY OrderName
  4. HAVING COUNT(OrderId) >2
  5. ORDER BY COUNT(OrderName) DESC;

Ví dụ

Câu lệnh SQL SELECT HAVING

Sử dụng câu lệnh Having hoạt động với mệnh đề Where

Truy vấn SQL sau đây hiển thị mệnh đề Having với mệnh đề Where
Cú pháp
  1. select EmpName, SUM(EmpSalary) as EmpSalary from Employedetail
  2. WHERE EmpName=‘Smith’ OR EmpName=‘Rahul’ or EmpName =‘Meths’
  3. GROUP BY EmpName
  4. HAVING SUM(EmpSalary) < 30000

Sử dụng tham gia câu lệnh Having 

Câu lệnh SQL sau đây liệt kê các nhân viên đã đăng ký hơn 10 đơn đặt hàng.
Cú pháp
  1. SELECT OrderName COUNT(OrderId) as TotalOrders
  2. FROM OrderDetails
  3. Inner Join EmployeeDetail on Orderdetails.OrderName=EmployeeDetail.EmpId
  4. GROUP BY OrderName
  5. HAVING COUNT(EmpId) >10
Câu lệnh SQL sau liệt kê nếu Nhân viên “Davolio” hoặc “Noida” đã đăng ký hơn 10 đơn hàng.
Cú pháp
  1. SELECT OrderName, OrderAddress COUNT(OrderId) AS NumberOfOrders
  2. FROM OrderDetails
  3. INNER JOIN EmployeeDetail  ON Orders.EmpID = Employees.EmpName
  4. WHERE EmpName  = ‘Davolio’ OR EmpAddress  = ‘Noida’
  5. GROUP BY LastName
  6. HAVING COUNT(OrderId) > 10;
(Source: https://www.c-sharpcorner.com/)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *