GORAGOD.com

WHERE และ HAVING ต่างกันอย่างไร

ในภาษา SQL WHERE และ HAVING ใช้สำหรับกำหนดเงื่อนไขของข้อมูลที่ต้องการเหมือนๆกัน แต่คำสั่งทั้งสองแตกต่างกันที่ลำดับในการทำงานเท่านั้น
SELECT *
FROM `table_name`
WHERE `field` = value
GROUP BY `field`
HAVING `field` > xxx
ORDER BY field

ลำดับการทำงานของ QUERY ด้านบน
  1. อันดับแรก จะทำคำสั่ง FROM ก่อน โดยการเลือกฐานข้อมูลที่ต้องการ (ถ้ามีการ JOIN ก็จะทำขั้นตอนนี้ด้วย)
  2. จากนั้นจะทำคำสั่ง WHERE เพื่อเลือกข้อมูลที่ต้องการ (ซึ่งจะทำให้ได้จำนวนแถวน้อยลง)
  3. ถ้ามีคำสั่ง GROUP BY จะมาทำคำสั่งนี้ในลำดับถัดมา ซึ่งตอนนี้ก็จะทำให้จำนวนแถวของข้อมูลลดลงอีก
  4. จากนั้นถึงจะมาทำคำสั่ง HAVING จากข้อมูลที่เหลืออีกที ซึ่งก็อาจจะได้ข้อมูลน้อยลงอีกเช่นกัน ถึงตอนนี้ก็จะได้แถวของข้อมูลที่ต้องการครบถ้วนแล้ว
  5. ถ้ามีคำสั่ง ORDER BY จะมาทำคำสั่งนี้ในในลำดับถัดมา
  6. สุดท้ายไปทำคำสั่ง SELECT เพื่อคัดเลือกข้อมูลที่ต้องการไปใช้งาน
ข้อสังเกตุ การใช้ HAVING ไม่จำเป็นต้องมี GROUP BY เสมอไป ซึ่งถ้าเป็นการใช้ HAVING ร่วมกับการใช้ WHERE ก็จะเหมือนกับการ WHERE สองครั้งนั่นเอง
การรู้ลำดับการทำงานของคำสั่ง จะทำให้เราสามารถพิจารณาผลลัพท์ของ Query ที่ถูกต้องได้ง่ายขึ้น ลดโอกาสการเกิดข้อมูลที่ไม่พึงประสงค์ รวมถึงให้ผลลัพท์ที่ถูกต้อง ซึ่งลำดับการทำงานของคำสั่ง SQL นี่จะเป็นลำดับการทำงานที่ชัดเจนและแน่นอนอยู่แล้ว