Tôi chỉ bối rối với trình tự thực thi của một truy vấn SQL khi chúng tôi sử dụng GROUP BY và HAVING với mệnh đề WHERE. Cái nào được thực hiện trước? Trình tự là gì?
Tôi chỉ bối rối với trình tự thực thi của một truy vấn SQL khi chúng tôi sử dụng GROUP BY và HAVING với mệnh đề WHERE. Cái nào được thực hiện trước? Trình tự là gì?
Câu trả lời:
theo thứ tự:
FROM & JOIN s xác định & lọc các hàng
ĐÓ nhiều bộ lọc hơn trên các hàng
GROUP BY kết hợp các hàng đó thành nhóm
CÓ bộ lọc nhóm
LỆNH THEO sắp xếp các hàng / nhóm còn lại
GIỚI HẠN bộ lọc trên các hàng / nhóm còn lại
SET SHOWPLAN_ALL ON
Đây là trình tự hoàn chỉnh cho máy chủ sql:
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
Vì vậy, từ danh sách trên, bạn có thể dễ dàng hiểu trình tự thực thi của GROUP BY, HAVING and WHERE
nó là:
1. WHERE
2. GROUP BY
3. HAVING
SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val
Ở đây BẬT xuất hiện sau khi tham gia và lựa chọn đến trước, mọi giải thích?
FROM
trước, sau đó ON
, v.v.
Đầu tiên là WHERE, sau đó bạn NHÓM kết quả của truy vấn và mệnh đề cuối cùng nhưng không kém phần HAVING được thực hiện để lọc kết quả được nhóm. Đây là thứ tự "logic", tôi không biết về mặt kỹ thuật điều này được thực hiện như thế nào trong động cơ.
Tôi nghĩ rằng nó được triển khai trong engine như Matthias đã nói: Ở ĐÂU, NHÓM THEO, CÓ
Tôi đang cố gắng tìm một tài liệu tham khảo trực tuyến liệt kê toàn bộ chuỗi (tức là "CHỌN" nằm ngay dưới cùng), nhưng tôi không thể tìm thấy nó. Nó được trình bày chi tiết trong cuốn sách "Inside Microsoft SQL Server 2005" mà tôi đã đọc cách đây không lâu, bởi Solid Quality Learning
Chỉnh sửa: Đã tìm thấy liên kết: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
Suy nghĩ về những gì bạn cần làm nếu bạn muốn thực hiện:
Thứ tự là WHERE, GROUP BY và HAVING.
Trong đơn đặt hàng dưới đây
Có mệnh đề có thể đứng trước / trước nhóm theo mệnh đề.
Ví dụ: select * FROM test_std; ROLL_NO SNAME DOB DẠY
1 John 27-AUG-18 Wills
2 Knit 27-AUG-18 Prestion
3 Perl 27-AUG-18 Wills
4 Ohrm 27-AUG-18 Woods
5 Smith 27-AUG-18 Charmy
6 Jony 27-AUG-18 Wills
Warner 20-NOV-18 Wills
Marsh 12-NOV-18 Langer
FINCH 18-OCT-18 Langer
Đã chọn 9 hàng.
chọn dạy, đếm ( ) đếm từ test_std có count ( )> 1 nhóm bằng DẠY;
GIẢNG DẠY
Langer 2 Di chúc 4
Đây là Thứ tự SQL thực thi một Truy vấn,
Bạn có thể kiểm tra thứ tự thực hiện với các ví dụ từ bài viết này .
Đối với bạn câu hỏi dưới đây có thể hữu ích và trực tiếp nhận được từ bài viết này .
- GROUP BY -> Các hàng còn lại sau khi áp dụng ràng buộc WHERE sẽ được nhóm lại dựa trên các giá trị chung trong cột được chỉ định trong mệnh đề GROUP BY. Kết quả của việc nhóm, sẽ chỉ có bao nhiêu hàng có giá trị duy nhất trong cột đó. Rõ ràng, điều này có nghĩa là bạn chỉ cần sử dụng nó khi bạn có các hàm tổng hợp trong truy vấn của mình.
- HAVING -> Nếu truy vấn có mệnh đề GROUP BY, thì các ràng buộc trong mệnh đề HAVING sau đó được áp dụng cho các hàng được nhóm, loại bỏ các hàng được nhóm không thỏa mãn ràng buộc. Giống như mệnh đề WHERE, bí danh cũng không thể truy cập được từ bước này trong hầu hết các cơ sở dữ liệu.
Người giới thiệu:-