5.1 Câu lệnh HAVING
Có một toán tử hữu ích khác trong SQL được sử dụng với GROUP BY
, nó được gọi là HAVING
.
Theo nghĩa của nó, nó hoàn toàn tương tự với toán tử WHERE
. Nó chỉ WHERE
cho phép bạn đặt bộ lọc hàng trước khi nhóm và với sự trợ giúp, HAVING
bạn có thể đặt bộ lọc được áp dụng cho các bản ghi sau khi nhóm.
Dạng xem chung của truy vấn khi sử dụng kết quả nhóm và lọc nhóm như sau:
SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition
HAVING
chỉ có thể được sử dụng nếu yêu cầu chứa GROUP BY
.
Hãy viết một truy vấn trong đó chúng tôi hiển thị số lượng nhân viên được thuê theo năm.
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
Và kết quả của truy vấn này:
thuê_năm | tổng cộng |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
Và bây giờ chúng tôi loại trừ những năm mà một hoặc ít nhân viên được thuê. Ví dụ:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1
Và kết quả của truy vấn này:
thuê_năm | tổng cộng |
---|---|
2015 | 2 |
5.3 Thứ tự thực hiện các câu lệnh
Để viết các truy vấn SQL chính xác và hiệu quả, bạn cần hiểu cách chúng được thực thi bởi máy chủ SQL.
Quy trình thực hiện các hành động được quy định chặt chẽ và không phụ thuộc vào mong muốn của bạn. Bạn không thể sắp xếp lại các toán tử và nhận một thứ tự khác.
Truy vấn SQL được thực hiện trong một số giai đoạn theo thứ tự này.
- Giai đoạn 1 - tìm nạp hàng
- Đầu tiên, tất cả các hàng từ bảng đã chỉ định đều được chọn.
- Sau đó, các trường được tính toán được thêm vào chúng.
- Và sau đó trong số tất cả các hàng, chỉ còn lại những hàng thỏa mãn điều kiện
WHERE
- Giai đoạn 2 - nhóm
- Nhóm sau đó được áp dụng cho các kết quả.
- Trong quá trình nhóm, các trường như
COUNT(*)
. - Cuối cùng, một bộ lọc được áp dụng cho kết quả nhóm
HAVING
. - Giai đoạn 3 - sắp xếp
- Các hàng thu được trong các bước trước được sắp xếp bằng cách sử dụng
ORDER BY
.
Cuối cùng, kết quả có thể được cắt bớt với LIMIT
và OFFSET
.
GO TO FULL VERSION