WHERE และ HAVING ต่างกันอย่างไร
ในภาษา SQL WHERE และ HAVING ใช้สำหรับกำหนดเงื่อนไขของข้อมูลที่ต้องการเหมือนๆกัน แต่คำสั่งทั้งสองแตกต่างกันที่ลำดับในการทำงานเท่านั้น
ลำดับการทำงานของ QUERY ด้านบน
SELECT *
FROM `table_name`
WHERE `field` = value
GROUP BY `field`
HAVING `field` > xxx
ORDER BY field
ลำดับการทำงานของ QUERY ด้านบน
- อันดับแรก จะทำคำสั่ง FROM ก่อน โดยการเลือกฐานข้อมูลที่ต้องการ (ถ้ามีการ JOIN ก็จะทำขั้นตอนนี้ด้วย)
- จากนั้นจะทำคำสั่ง WHERE เพื่อเลือกข้อมูลที่ต้องการ (ซึ่งจะทำให้ได้จำนวนแถวน้อยลง)
- ถ้ามีคำสั่ง GROUP BY จะมาทำคำสั่งนี้ในลำดับถัดมา ซึ่งตอนนี้ก็จะทำให้จำนวนแถวของข้อมูลลดลงอีก
- จากนั้นถึงจะมาทำคำสั่ง HAVING จากข้อมูลที่เหลืออีกที ซึ่งก็อาจจะได้ข้อมูลน้อยลงอีกเช่นกัน ถึงตอนนี้ก็จะได้แถวของข้อมูลที่ต้องการครบถ้วนแล้ว
- ถ้ามีคำสั่ง ORDER BY จะมาทำคำสั่งนี้ในในลำดับถัดมา
- สุดท้ายไปทำคำสั่ง SELECT เพื่อคัดเลือกข้อมูลที่ต้องการไปใช้งาน