Saltar al contenido

¿Cuál es la diferencia entre HAVING y WHERE en SQL?

Ten en cuenta que en las ciencias informáticas un error casi siempre tiene diferentes soluciones, de igual modo nosotros compartiremos lo más óptimo y eficiente.

Solución:

HAVING: se utiliza para comprobar las condiciones después se produce la agregación.
DONDE: se utiliza para comprobar las condiciones antes de se produce la agregación.

Este código:

select City, CNT=Count(1)
From Address
Where State = 'MA'
Group By City

Le da una tabla de todas las ciudades en MA y el número de direcciones en cada ciudad.

Este código:

select City, CNT=Count(1)
From Address
Where State = 'MA'
Group By City
Having Count(1)>5

Le da una tabla de ciudades en MA con más de 5 direcciones y el número de direcciones en cada ciudad.

HAVING especifica una condición de búsqueda para un grupo o una función agregada utilizada en la instrucción SELECT.

Fuente

Diferencia número uno para mí: si HAVING fuera eliminado del lenguaje SQL, entonces la vida continuaría más o menos como antes. Ciertamente, las consultas minoritarias tendrían que reescribirse utilizando una tabla derivada, CTE, etc., pero como resultado, podría decirse que serían más fáciles de entender y mantener. Tal vez sería necesario reescribir el código optimizador de los proveedores para dar cuenta de esto, nuevamente una oportunidad de mejora dentro de la industria.

Ahora considere por un momento eliminar WHERE del idioma Esta vez el mayoria de las consultas existentes tendría que reescribirse sin una construcción alternativa obvia. Los codificadores tendrían que ser creativos, por ejemplo, unirse internamente a una tabla que se sabe que contiene exactamente una fila (por ejemplo, DUAL en Oracle) usando el ON cláusula para simular la previa WHERE cláusula. Tales construcciones serían artificiales; sería obvio que faltaba algo en el idioma y, como resultado, la situación empeoraría.

TL;DR podríamos perder HAVING mañana y las cosas no serían peores, posiblemente mejores, pero no se puede decir lo mismo de WHERE.


De las respuestas aquí, parece que mucha gente no se da cuenta de que un HAVING La cláusula puede usarse sin una GROUP BY cláusula. En este caso, el HAVING La cláusula se aplica a toda la expresión de la tabla y requiere que solo aparezcan constantes en la SELECT cláusula. Típicamente el HAVING cláusula implicará agregados.

Esto es más útil de lo que parece. Por ejemplo, considere esta consulta para probar si el name columna es única para todos los valores en T:

SELECT 1 AS result
  FROM T
HAVING COUNT( DISTINCT name ) = COUNT( name );

Sólo hay dos resultados posibles: si el HAVING la cláusula es true entonces el resultado será una sola fila que contiene el valor 1de lo contrario el resultado será el conjunto vacío.

Aquí puedes ver las comentarios y valoraciones de los lectores

Te invitamos a respaldar nuestro cometido fijando un comentario y dejando una valoración te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *