Trình tự thực thi của mệnh đề Group By, Have và Where trong SQL Server là gì?


91

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:


184

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
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


là có bất kỳ tài liệu tham khảo này ??
Geshan

3
@Geshan, nhìn vàoSET SHOWPLAN_ALL ON
KM.

Xin chào, tôi có một câu hỏi. câu lệnh case sẽ ghi đè điều kiện where?
TỐI ĐA

1
Còn về Mệnh đề chọn. Nó có trong Last?
TỐI ĐA

Câu trả lời ngắn gọn và súc tích! Cảm ơn bạn!
Abhishek Ghosh

14

Đâ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 WHEREnó là:

1.  WHERE
2.  GROUP BY
3.  HAVING

Nhận thêm thông tin về nó từ Microsoft


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?
noob

Đây chỉ là cú pháp viết một câu lệnh SQL. Trình tự mà tôi đã đề cập là thứ tự thực sự mà công cụ SQL đánh giá. Điều đó có nghĩa là nếu cú ​​pháp truy vấn của bạn chính xác, thì công cụ sẽ đánh giá FROMtrước, sau đó ON, v.v.
Md. Suman Kabir

1
@ShailajaGuptaKapoor Bạn có thể đọc blog này.x2line.com/al/archive/2007/06/30/3187.aspx
Md. Suman Kabir

8

Đầ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ơ.


2
Đáng nói thêm rằng trình tối ưu hóa có thể chuyển các mệnh đề từ HAVING sang WHERE nếu chúng không phụ thuộc vào một tổng thể. Điều này sẽ không ảnh hưởng đến kết quả hiển thị.
Damien_The_Un Believer,

2

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


Giải thích rất hay mà bạn đã liên kết đến :-).
sleske

1
Liên kết đã chết. Nếu bạn có thể khắc phục điều đó, nó sẽ là :) lớn
Akash KC

2

Trong Oracle 12c, bạn có thể chạy mã theo cả hai trình tự bên dưới:

Where
Group By
Having

Hoặc là

Where 
Having
Group by

1

Suy nghĩ về những gì bạn cần làm nếu bạn muốn thực hiện:

  • WHERE : Nó cần thực hiện các hoạt động JOIN.
  • GROUP BY : Bạn chỉ định Group by để "nhóm" các kết quả trên tham gia, sau đó nó phải sau hoạt động JOIN, sau khi sử dụng WHERE.
  • HAVING : HAVING là để lọc theo biểu thức GROUP BY. Sau đó, nó được thực thi sau GROUP BY.

Thứ tự là WHERE, GROUP BY và HAVING.


Những gì bạn giải thích ở đây là tuyệt vời. Nó đã xóa bỏ nghi ngờ của tôi về HAVING. Tóm lại - GROUP BY & HAVING hoạt động tương tự như SELECT & WHERE. Mệnh đề HAVING luôn chạy trên dữ liệu bảng COMPLETE lấy điều kiện GROUP BY trong hình chứ không phải dữ liệu GROUPED.
Naveen Kumar

1

Trong đơn đặt hàng dưới đây

  1. TỪ & THAM GIA
  2. Ở ĐÂU
  3. NHÓM THEO
  4. ĐANG CÓ
  5. LỰA CHỌN
  6. ĐẶT BỞI
  7. GIỚI HẠN

0

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


0

Đây là Thứ tự SQL thực thi một Truy vấn,

nhập mô tả hình ảnh ở đây

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 .

  1. 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.
  1. 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:-


-2

CHỌN
TỪ
THAM GIA
Ở ĐÂU
NHÓM BẰNG CÁCH

ĐƠN HÀNG THEO


13
Điều này thực sự sai. Theo MS Certified Trainers và tài liệu đào tạo chính thức, Đặt hàng Theo sau Chọn. Loại logic khi bạn nghĩ về nó. Sẽ thật ngu ngốc khi đặt hàng một bảng ảo mà bạn chưa tìm nạp và dán. :)
simme
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.