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

MySql - TENER vs DONDE

WHERE se utiliza para seleccionar datos en las tablas originales que se están procesando.

HAVING se utiliza para filtrar datos en el conjunto de resultados generado por la consulta. Esto significa que puede hacer referencia a valores agregados y alias en el SELECT cláusula.

Por ejemplo, puede escribir:

SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10

Esto no funcionaría usando WHERE porque diff es un alias, no una de las columnas de la tabla original. En su lugar, podría escribir:

SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10

pero entonces puede que tenga que hacer todas las restas dos veces:una para seleccionar y otra para producir el conjunto de resultados.