Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a diferença semântica entre WHERE e HAVING?


HAVING opera na linha resumida - WHERE está operando em toda a tabela antes do GROUP BY é aplicado. (Você não pode colocar GROUP BY à parte, HAVING é uma cláusula reservada para uso com GROUP BY - deixando de fora o GROUP BY não altera a ação implícita que está ocorrendo nos bastidores).

Também é importante observar que, por causa disso, WHERE pode usar um índice enquanto HAVING não podes. (Em conjuntos de resultados desagrupados super triviais, você poderia teoricamente usar um índice para HAVING , mas nunca vi um otimizador de consulta realmente implementado dessa maneira).