ลำดับการดำเนินการของ Group By, having และ Where clause ใน SQL Server คืออะไร?


93

ฉันสับสนกับลำดับการดำเนินการของแบบสอบถาม SQL เมื่อเราใช้ GROUP BY และ HAVING กับ WHERE clause อันไหนถูกประหารก่อน? ลำดับคืออะไร?

คำตอบ:


187

ตามลำดับ:

FROM & JOIN s กำหนดและกรองแถว
WHEREตัวกรองเพิ่มเติมในแถว
GROUP BYรวมแถวเหล่านั้นเป็นกลุ่ม
HAVINGกรองกลุ่ม
ORDER BYจัดเรียงแถว / กลุ่มที่เหลือ
LIMITตัวกรองในแถว / กลุ่มที่เหลือ


มีอ้างอิงไหม ??
Geshan

3
@ เกชานมองเข้าไปSET SHOWPLAN_ALL ON
กม ธ .

สวัสดีฉันมีคำถามหนึ่งข้อ จะแถลงกรณีเมื่อเงื่อนไขแทนที่เงื่อนไขที่?
สูงสุด

2
สิ่งที่เกี่ยวกับ Select Clause อยู่ในช่วงสุดท้ายหรือไม่?
สูงสุด

ตอบสั้นกระชับ! ขอบคุณ!
Abhishek Ghosh

14

นี่คือลำดับที่สมบูรณ์สำหรับเซิร์ฟเวอร์ 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

ดังนั้นจากรายการด้านบนคุณสามารถเข้าใจลำดับการดำเนินการGROUP BY, HAVING and WHEREซึ่ง ได้แก่ :

1.  WHERE
2.  GROUP BY
3.  HAVING

รับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้จาก Microsoft


SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @valที่นี่เปิดมาหลังจากเข้าร่วมและเลือกมาก่อนคำอธิบายใด ๆ ?
noob

นี่เป็นเพียงไวยากรณ์ของการเขียนคำสั่ง SQL ลำดับที่ฉันพูดถึงคือคำสั่งจริงที่เอ็นจิน SQL ประเมิน นั่นหมายความว่าถ้าไวยากรณ์การสืบค้นของคุณถูกต้องเอ็นจิ้นจะประเมินFROMก่อนจากนั้นONเป็นต้นไป
Md. Suman Kabir

1
@ShailajaGuptaKapoor คุณสามารถอ่านบล็อก
Md. Suman Kabir

ถ้า WHERE มาก่อน SELECT เหตุใดจึงส่งคืนแถว เลือกผลรวม (1) จาก foo โดยที่ 1 = 0
Tony B

8

WHERE คืออันดับแรกจากนั้นคุณจะจัดกลุ่มผลลัพธ์ของแบบสอบถามและสุดท้าย แต่ไม่ท้ายสุด HAVING-clause จะถูกนำไปกรองผลลัพธ์ที่จัดกลุ่ม นี่คือคำสั่ง "ตรรกะ" ฉันไม่รู้ว่าวิธีนี้ถูกนำไปใช้ในเครื่องยนต์อย่างไร


2
ควรเพิ่มที่เครื่องมือเพิ่มประสิทธิภาพอาจย้ายส่วนคำสั่งจาก HAVING ไปยัง WHERE หากไม่ขึ้นอยู่กับการรวม สิ่งนี้จะไม่ส่งผลต่อผลลัพธ์ที่แสดง
Damien_The_Unbeliever

2

ฉันคิดว่ามันถูกนำมาใช้ในเครื่องยนต์ตามที่ Matthias กล่าวว่า: WHERE GROUP BY HAVING

พยายามค้นหาข้อมูลอ้างอิงทางออนไลน์ที่แสดงรายการลำดับทั้งหมด (เช่น "SELECT" ลงมาที่ด้านล่างสุด) แต่ฉันไม่พบ มีรายละเอียดอยู่ในหนังสือ "Inside Microsoft SQL Server 2005" ที่ฉันอ่านเมื่อไม่นานมานี้โดย Solid Quality Learning

แก้ไข:พบลิงค์: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx


คำอธิบายที่ดีมากที่คุณเชื่อมโยงกับ :-)
sleske

1
ลิงค์ตายแล้ว ถ้าแก้ไขได้ก็คงจะดีมาก :)
Akash KC


1

ลองนึกถึงสิ่งที่คุณต้องทำหากต้องการใช้:

  • WHERE : จำเป็นต้องดำเนินการเข้าร่วม
  • GROUP BY : คุณระบุ Group by เพื่อ "จัดกลุ่ม" ผลลัพธ์ในการเข้าร่วมจากนั้นจะต้องอยู่หลังการดำเนินการ JOIN หลังจากการใช้งาน WHERE
  • HAVING : HAVING มีไว้สำหรับการกรองตาม GROUP BY นิพจน์กล่าว จากนั้นจะดำเนินการหลังจาก GROUP BY

คำสั่งซื้อคือ WHERE GROUP BY และ HAVING


สิ่งที่คุณอธิบายมานี้ยอดเยี่ยมมาก มันเคลียร์ข้อสงสัยของฉันเกี่ยวกับ HAVING ดังนั้นเพื่อสรุป - GROUP BY & HAVING ทำงานเหมือนกับ SELECT & WHERE HAVING clause มักจะทำงานบนข้อมูลตารางที่สมบูรณ์โดยใช้เงื่อนไข GROUP BY ในรูปภาพและไม่อยู่ในข้อมูล GROUPED
Naveen Kumar


0

การมี Clause อาจมาก่อน / ก่อนกลุ่มโดย clause

ตัวอย่าง: เลือก * FROM test_std; ROLL_NO SNAME DOB TEACH


     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    

เลือก 9 แถว

เลือกสอนนับ ( ) นับจาก test_std มีจำนวน ( )> 1 กลุ่มโดย TEACH;

สอนนับ


Langer 2 พินัยกรรม 4


0

นี่คือลำดับ SQL ของการดำเนินการของแบบสอบถาม

ป้อนคำอธิบายภาพที่นี่

คุณสามารถตรวจสอบการสั่งซื้อของการดำเนินการกับตัวอย่างจากบทความ

สำหรับคุณคำถามด้านล่างเส้นอาจจะเป็นประโยชน์โดยตรงและได้รับจากนี้บทความ

  1. GROUP BY -> แถวที่เหลือหลังจากใช้ข้อ จำกัด WHERE จะถูกจัดกลุ่มตามค่าทั่วไปในคอลัมน์ที่ระบุในคำสั่ง GROUP BY ผลของการจัดกลุ่มจะมีจำนวนแถวเท่าที่มีค่าที่ไม่ซ้ำกันในคอลัมน์นั้น โดยปริยายหมายความว่าคุณควรใช้สิ่งนี้เมื่อคุณมีฟังก์ชันรวมในแบบสอบถามของคุณเท่านั้น
  1. HAVING -> หากแบบสอบถามมี GROUP BY clause ดังนั้นข้อ จำกัด ใน HAVING clause จะถูกนำไปใช้กับแถวที่จัดกลุ่มทิ้งแถวที่จัดกลุ่มซึ่งไม่เป็นไปตามข้อ จำกัด เช่นเดียวกับคำสั่ง WHERE นามแฝงจะไม่สามารถเข้าถึงได้จากขั้นตอนนี้ในฐานข้อมูลส่วนใหญ่

อ้างอิง: -


-2

SELECT
จาก
ร่วม
WHERE
กรุ๊ปโดย
การมี
ORDER BY


13
นี่เป็นความผิดจริง ตาม MS Certified Trainers และเอกสารการฝึกอบรมอย่างเป็นทางการ Order By อยู่หลัง Select เมื่อคุณคิดถึงเรื่องนี้ คงเป็นเรื่องโง่ที่จะสั่งตารางเสมือนจริงที่คุณยังไม่ได้ดึงข้อมูลและติดกาว :)
simme
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.