ฉันสับสนกับลำดับการดำเนินการของแบบสอบถาม SQL เมื่อเราใช้ GROUP BY และ HAVING กับ WHERE clause อันไหนถูกประหารก่อน? ลำดับคืออะไร?
ฉันสับสนกับลำดับการดำเนินการของแบบสอบถาม SQL เมื่อเราใช้ GROUP BY และ HAVING กับ WHERE clause อันไหนถูกประหารก่อน? ลำดับคืออะไร?
คำตอบ:
ตามลำดับ:
FROM & JOIN s กำหนดและกรองแถว
WHEREตัวกรองเพิ่มเติมในแถว
GROUP BYรวมแถวเหล่านั้นเป็นกลุ่ม
HAVINGกรองกลุ่ม
ORDER BYจัดเรียงแถว / กลุ่มที่เหลือ
LIMITตัวกรองในแถว / กลุ่มที่เหลือ
SET SHOWPLAN_ALL ON
นี่คือลำดับที่สมบูรณ์สำหรับเซิร์ฟเวอร์ 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
SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val
ที่นี่เปิดมาหลังจากเข้าร่วมและเลือกมาก่อนคำอธิบายใด ๆ ?
FROM
ก่อนจากนั้นON
เป็นต้นไป
WHERE คืออันดับแรกจากนั้นคุณจะจัดกลุ่มผลลัพธ์ของแบบสอบถามและสุดท้าย แต่ไม่ท้ายสุด HAVING-clause จะถูกนำไปกรองผลลัพธ์ที่จัดกลุ่ม นี่คือคำสั่ง "ตรรกะ" ฉันไม่รู้ว่าวิธีนี้ถูกนำไปใช้ในเครื่องยนต์อย่างไร
ฉันคิดว่ามันถูกนำมาใช้ในเครื่องยนต์ตามที่ 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
ใน Oracle 12c คุณสามารถรันโค้ดได้ทั้งสองลำดับด้านล่าง:
Where
Group By
Having
หรือ
Where
Having
Group by
ลองนึกถึงสิ่งที่คุณต้องทำหากต้องการใช้:
คำสั่งซื้อคือ WHERE GROUP BY และ HAVING
ตามลำดับด้านล่าง
การมี 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
นี่คือลำดับ SQL ของการดำเนินการของแบบสอบถาม
คุณสามารถตรวจสอบการสั่งซื้อของการดำเนินการกับตัวอย่างจากบทความ
สำหรับคุณคำถามด้านล่างเส้นอาจจะเป็นประโยชน์โดยตรงและได้รับจากนี้บทความ
- GROUP BY -> แถวที่เหลือหลังจากใช้ข้อ จำกัด WHERE จะถูกจัดกลุ่มตามค่าทั่วไปในคอลัมน์ที่ระบุในคำสั่ง GROUP BY ผลของการจัดกลุ่มจะมีจำนวนแถวเท่าที่มีค่าที่ไม่ซ้ำกันในคอลัมน์นั้น โดยปริยายหมายความว่าคุณควรใช้สิ่งนี้เมื่อคุณมีฟังก์ชันรวมในแบบสอบถามของคุณเท่านั้น
- HAVING -> หากแบบสอบถามมี GROUP BY clause ดังนั้นข้อ จำกัด ใน HAVING clause จะถูกนำไปใช้กับแถวที่จัดกลุ่มทิ้งแถวที่จัดกลุ่มซึ่งไม่เป็นไปตามข้อ จำกัด เช่นเดียวกับคำสั่ง WHERE นามแฝงจะไม่สามารถเข้าถึงได้จากขั้นตอนนี้ในฐานข้อมูลส่วนใหญ่
อ้างอิง: -
SELECT
จาก
ร่วม
WHERE
กรุ๊ปโดย
การมี
ORDER BY