sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la diferencia semántica entre WHERE y HAVING?

HAVING opera en la fila resumida - WHERE está operando en toda la tabla antes del GROUP BY Está aplicado. (No puedes poner GROUP BY aparte, HAVING es una cláusula reservada para usar con GROUP BY - omitiendo GROUP BY no cambia la acción implícita que está ocurriendo tras bambalinas).

También es importante tener en cuenta que debido a esto, WHERE puede usar un índice mientras HAVING no poder. (En conjuntos de resultados no agrupados súper triviales, teóricamente podría usar un índice para HAVING , pero nunca he visto un optimizador de consultas realmente implementado de esta manera).