เปรียบเทียบ WHERE Clause และ HAVING Clause ใน SQL
WHERE Clause
- กรอง Records จาก Table ตามเงื่อนไข
- ใช้ได้โดยไม่ต้องมี GROUP BY
- ใช้กับ Row Operations
- ไม่สามารถมี Aggregate Functions ได้
- ใช้กับ SELECT, UPDATE, DELETE
- อยู่ก่อน GROUP BY (ถ้ามี)
- ใช้กับ Single Row Functions (UPPER, LOWER, ฯลฯ)
HAVING Clause
- กรอง Records จาก Groups ตามเงื่อนไข
- ต้องมี GROUP BY เสมอ
- ทำงานกับ Column Operations (Aggregate)
- สามารถมี Aggregate Functions ได้
- ใช้กับ SELECT เท่านั้น
- อยู่หลัง GROUP BY
- ใช้กับ Multiple Row Functions (SUM, COUNT, ฯลฯ)
Syntax รวม
SELECT column1, column2 FROM table1, table2 WHERE [conditions] GROUP BY column1, column2 HAVING [conditions] ORDER BY column1, column2
สรุปความแตกต่างหลัก
| คุณสมบัติ | WHERE | HAVING |
|---|---|---|
| ระดับการกรอง | Row Level | Group Level |
| ต้องการ GROUP BY | ไม่ | ใช่ |
| Aggregate Functions | ไม่ได้ | ได้ |
| Statements ที่รองรับ | SELECT, UPDATE, DELETE | SELECT เท่านั้น |
| ตำแหน่ง | ก่อน GROUP BY | หลัง GROUP BY |