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

MySql - HAVING vs WHERE


WHERE é usado para selecionar dados nas tabelas originais que estão sendo processadas.

HAVING é usado para filtrar dados no conjunto de resultados que foi produzido pela consulta. Isso significa que ele pode fazer referência a valores agregados e aliases no SELECT cláusula.

Por exemplo, pode escrever:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10

Isso não funcionaria usando WHERE porque diff é um alias, não uma das colunas da tabela original. Você poderia escrever em vez disso:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10

mas então ele pode ter que fazer todas as subtrações duas vezes:uma para selecionar e novamente para produzir o conjunto de resultados.