Mệnh đề HAVING đặt điều kiện vào các nhóm được xác định bởi mệnh đề GROUP BY trong câu lệnh SELECT.
Mệnh đề SQL này được triển khai sau mệnh đề ‘GROUP BY’ trong câu lệnh ‘SELECT’.
Các bài viết liên quan:
Mệnh đề này được sử dụng trong SQL vì chúng ta không thể sử dụng mệnh đề WHERE với các hàm tổng hợp trong SQL. Cả hai mệnh đề WHERE và HAVING đều được sử dụng để lọc các bản ghi trong truy vấn SQL.
Sự khác biệt giữa mệnh đề HAVING và WHERE
Sự khác biệt giữa mệnh đề WHERE và HAVING trong cơ sở dữ liệu là câu hỏi quan trọng nhất được hỏi trong một cuộc phỏng vấn CNTT.
Bảng sau đây cho thấy sự so sánh giữa hai mệnh đề này, nhưng sự khác biệt chính là mệnh đề WHERE sử dụng điều kiện để lọc các bản ghi trước khi tạo bất kỳ nhóm nào, trong khi mệnh đề HAVING sử dụng điều kiện để lọc các giá trị từ một nhóm.
HAVING | WHERE |
1. Mệnh đề HAVING được sử dụng trong hệ thống cơ sở dữ liệu để lấy dữ liệu / giá trị từ các nhóm theo điều kiện đã cho. | 1. Mệnh đề WHERE được sử dụng trong các hệ thống cơ sở dữ liệu để lấy dữ liệu / giá trị từ các bảng theo điều kiện đã cho. |
2. Mệnh đề HAVING luôn được thực hiện cùng với mệnh đề GROUP BY. | 2. Mệnh đề WHERE có thể được thực thi mà không cần mệnh đề GROUP BY. |
3. Mệnh đề HAVING có thể bao gồm các hàm tổng hợp SQL trong một truy vấn hoặc câu lệnh. | 3. Chúng ta không thể sử dụng hàm tổng hợp SQL với mệnh đề WHERE trong các câu lệnh. |
4. Chúng ta chỉ có thể sử dụng câu lệnh SELECT với mệnh đề HAVING để lọc các bản ghi. | 4. Trong khi đó, chúng ta có thể dễ dàng sử dụng mệnh đề WHERE với các câu lệnh UPDATE, DELETE và SELECT. |
5. Mệnh đề HAVING được sử dụng trong các truy vấn SQL sau mệnh đề GROUP BY. | 5. Mệnh đề WHERE luôn được sử dụng trước mệnh đề GROUP BY trong các truy vấn SQL. |
6. Chúng ta có thể triển khai mệnh đề SQL này trong các phép toán cột. | 6. Chúng ta có thể triển khai mệnh đề SQL này trong các hoạt động hàng. |
7. Nó là một bộ lọc sau. | 7. Nó là một bộ lọc trước. |
8. Nó được sử dụng để lọc các nhóm. | 8. Nó được sử dụng để lọc các bản ghi duy nhất của bảng. |
Cú pháp của mệnh đề HAVING trong SQL
Ví dụ về mệnh đề HAVING trong SQL
Trong bài viết này, chúng tôi đã lấy bốn ví dụ khác nhau sau đây sẽ giúp bạn cách sử dụng mệnh đề HAVING với các hàm tổng hợp SQL khác nhau:
Ví dụ 1: Hãy lấy bảng Nhân viên sau đây, giúp bạn phân tích mệnh đề HAVING với hàm tổng hợp SUM:
Emp_Id | Emp_Name | Emp_Salary | Emp_City |
201 | Abhay | 2000 | Goa |
202 | Ankit | 4000 | Delhi |
203 | Bheem | 8000 | Jaipur |
204 Ram | 2000 | Goa | |
205 | Sumit | 5000 | Delhi |
Nếu bạn muốn thêm lương của nhân viên cho mỗi thành phố, bạn phải viết câu truy vấn sau:
Đầu ra của truy vấn trên hiển thị kết quả sau:
SUM(Emp_Salary) | Emp_City |
4000 | Goa |
9000 | Delhi |
8000 | Jaipur |
Bây giờ, giả sử rằng bạn muốn hiển thị những thành phố có tổng tiền lương của nhân viên hơn 5000. Đối với trường hợp này, bạn phải nhập truy vấn sau với mệnh đề HAVING trong SQL:
Đầu ra của truy vấn SQL ở trên hiển thị bảng sau trong đầu ra:
SUM(Emp_Salary) | Emp_City |
9000 | Delhi |
8000 | Jaipur |
Ví dụ 2: Hãy lấy bảng Student_details sau đây, bảng này giúp bạn phân tích mệnh đề HAVING với hàm tổng hợp COUNT:
Roll_No | Name | Marks | Age |
1 | Rithik | 91 | 20 |
2 | Kapil | 60 | 19 |
3 | Arun | 82 | 17 |
4 | Ram | 92 | 18 |
5 | Anuj | 50 | 20 |
6 | Suman | 88 | 18 |
7 | Sheetal | 57 | 19 |
8 | Anuj | 64 | 20 |
Giả sử, bạn muốn đếm số học sinh của bảng trên theo độ tuổi của các em. Đối với điều này, bạn phải viết truy vấn sau:
Truy vấn trên sẽ hiển thị kết quả sau:
Count(Roll_No) | Age |
3 | 20 |
2 | 19 |
1 | 17 |
2 | 18 |
Bây giờ, giả sử rằng bạn muốn hiển thị tuổi của những sinh viên có số cuộn nhiều hơn và bằng 2. Đối với trường hợp này, bạn phải nhập truy vấn sau với mệnh đề HAVING trong SQL:
Đầu ra của truy vấn SQL ở trên hiển thị bảng sau trong đầu ra:
Count(Roll_No) | Age |
3 | 20 |
2 | 19 |
2 | 18 |
Ví dụ 3: Hãy lấy bảng Nhân viên sau, bảng này giúp bạn phân tích mệnh đề HAVING với hàm tổng hợp MIN và MAX:
Emp_ID | Name | Emp_Salary | Emp_Dept |
1001 | Anuj | 9000 | Finance |
1002 | Saket | 4000 | HR |
1003 | Raman | 3000 | Coding |
1004 | Renu | 6000 | Coding |
1005 | Seenu | 5000 | HR |
1006 | Mohan | 10000 | Marketing |
1007 | Anaya | 4000 | Coding |
1008 | Parul | 8000 | Finance |
Hàm MIN với mệnh đề HAVING:
Nếu bạn muốn hiển thị từng bộ phận và mức lương tối thiểu trong mỗi bộ phận, bạn phải viết câu truy vấn sau:
Đầu ra của truy vấn trên hiển thị kết quả sau:
MIN(Emp_Salary) | Emp_Dept |
8000 | Finance |
4000 | HR |
3000 | Coding |
10000 | Marketing |
Bây giờ, giả sử rằng bạn muốn chỉ hiển thị những phòng ban có mức lương tối thiểu của nhân viên lớn hơn 4000. Đối với trường hợp này, bạn phải nhập truy vấn sau với mệnh đề HAVING trong SQL:
Truy vấn SQL ở trên hiển thị bảng sau trong đầu ra:
MIN(Emp_Salary) | Emp_Dept |
8000 | Finance |
10000 | Marketing |
Hàm MAX với mệnh đề HAVING:
Trong bảng nhân viên trên, nếu bạn muốn liệt kê từng bộ phận và mức lương tối đa trong từng bộ phận. Đối với điều này, bạn phải viết truy vấn sau:
Truy vấn trên sẽ hiển thị kết quả sau:
MAX(Emp_Salary) | Emp_Dept |
9000 | Finance |
5000 | HR |
6000 | Coding |
10000 | Marketing |
Bây giờ, giả sử rằng bạn muốn chỉ hiển thị những phòng ban có mức lương tối đa của nhân viên dưới 8000. Đối với trường hợp này, bạn phải nhập truy vấn sau với mệnh đề HAVING trong SQL:
Đầu ra của truy vấn SQL ở trên hiển thị bảng sau trong đầu ra:
MAX(Emp_Salary) | Emp_Dept |
5000 | HR |
6000 | Coding |
Ví dụ 4: Hãy lấy bảng Employee_Dept sau, bảng này giúp bạn phân tích mệnh đề HAVING với hàm tổng hợp AVG:
Emp_ID | Name | Emp_Salary | Emp_Dept |
1001 | Anuj | 8000 | Finance |
1002 | Saket | 4000 | HR |
1003 | Raman | 3000 | Coding |
1004 | Renu | 6000 | Coding |
1005 | Seenu | 5000 | HR |
1006 | Mohan | 10000 | Marketing |
1007 | Anaya | 4000 | Coding |
1008 | Parul | 6000 | Finance |
Nếu bạn muốn tìm mức lương trung bình của nhân viên trong từng bộ phận, bạn phải viết câu truy vấn sau:
Truy vấn trên sẽ hiển thị kết quả sau:
AVG(Emp_Salary) | Emp_Dept |
7000 | Finance |
4500 | HR |
6500 | Coding |
10000 | Marketing |
Bây giờ, giả sử rằng bạn muốn hiển thị những phòng ban có mức lương trung bình lớn hơn và bằng 6500. Đối với trường hợp này, bạn phải nhập truy vấn sau với mệnh đề HAVING trong SQL:
Truy vấn SQL ở trên sẽ hiển thị bảng sau trong đầu ra:
AVG(Emp_Salary) | Emp_Dept |
7000 | Finance |
6500 | Coding |
10000 | Marketing |