ความแตกต่างอันดับหนึ่งสำหรับฉัน: ถ้าHAVING
ถูกลบออกจากภาษา SQL ชีวิตจะมีมากขึ้นหรือน้อยลงเหมือนเมื่อก่อน แน่นอนว่าคำสั่งของผู้ถือหุ้นส่วนน้อยจะต้องถูกเขียนใหม่โดยใช้ตารางที่ได้รับ CTE และอื่น ๆ แต่พวกเขาจะเข้าใจและบำรุงรักษาได้ง่ายขึ้น อาจต้องใช้รหัสเครื่องมือเพิ่มประสิทธิภาพของผู้ขายเพื่อเขียนใหม่สำหรับบัญชีนี้เป็นโอกาสในการปรับปรุงภายในอุตสาหกรรมอีกครั้ง
ตอนนี้ให้ลองพิจารณานำออกWHERE
จากภาษาสักครู่ เวลานี้แบบสอบถามส่วนใหญ่ที่มีอยู่จะต้องถูกเขียนใหม่โดยไม่มีโครงสร้างทางเลือกที่ชัดเจน ผู้เขียนจะต้องได้รับความคิดสร้างสรรค์เช่นการเข้าร่วมภายในกับตารางที่ทราบว่ามีหนึ่งแถว (เช่นDUAL
ใน Oracle) โดยใช้ส่วนON
คำสั่งเพื่อจำลองWHERE
ประโยคก่อนหน้า สิ่งปลูกสร้างดังกล่าวจะได้รับการวางแผน; จะเห็นได้ชัดว่ามีบางสิ่งที่ขาดหายไปจากภาษาและสถานการณ์ก็จะแย่ลงตามไปด้วย
TL; DR เราอาจแพ้HAVING
ในวันพรุ่งนี้และทุกอย่างจะไม่แย่ไปกว่านั้นอาจจะดีกว่า แต่ก็ไม่สามารถพูดWHERE
ได้เหมือนกัน
จากคำตอบที่นี่ดูเหมือนว่าชาวบ้านจำนวนมากไม่ตระหนักว่าHAVING
อาจมีการใช้GROUP BY
ประโยคโดยไม่มีประโยค ในกรณีนี้HAVING
คำสั่งจะถูกนำไปใช้กับการแสดงออกของตารางทั้งหมดและต้องการให้ค่าคงที่เท่านั้นปรากฏในส่วนSELECT
คำสั่ง โดยทั่วไปHAVING
ข้อจะเกี่ยวข้องกับมวลรวม
สิ่งนี้มีประโยชน์มากกว่าที่คิด ตัวอย่างเช่นลองพิจารณาแบบสอบถามนี้เพื่อทดสอบว่าname
คอลัมน์นั้นมีค่าเฉพาะสำหรับทุกค่าในT
:
SELECT 1 AS result
FROM T
HAVING COUNT( DISTINCT name ) = COUNT( name );
มีเพียงสองผลลัพธ์ที่เป็นไปได้: หากส่วนHAVING
คำสั่งเป็นจริงผลลัพธ์จะเป็นแถวเดียวที่มีค่า1
มิฉะนั้นผลลัพธ์จะเป็นชุดว่าง
HAVING
ตัวกรองหลังการรวมขณะที่WHERE
เป็นตัวกรองการรวมล่วงหน้า