Dónde vs Tener en MySQL

Mehvish Ashiq 15 febrero 2024
  1. DONDE vs TENIENDO en MySQL
  2. la cláusula WHERE en MySQL
  3. la cláusula HAVING en MySQL
  4. Diferencias entre las cláusulas WHERE y HAVING en MySQL
Dónde vs Tener en MySQL

Hoy aprenderemos sobre las diferencias entre las cláusulas WHERE y HAVING en MySQL. Comprenderemos las cláusulas individualmente con ejemplos de código y los compararemos en forma tabular para resaltar las diferencias.

DONDE vs TENIENDO en MySQL

Las cláusulas WHERE y HAVING son bastante similares. La principal diferencia entre estas cláusulas ocurre cuando se usan con GROUP BY.

No podemos usar la cláusula WHERE con datos agregados, pero se puede usar HAVING.

Podemos decir que WHERE filtra los registros (filas) antes de agrupar, pero la cláusula HAVING excluye los registros (filas) después de agrupar.

Para continuar paso a paso con este artículo, deberíamos tener una tabla.

Por lo tanto, cree una tabla de transacciones que contenga cuatro atributos llamados ID, Producto, MonthOfTransaction y AmountInUSD.

Código de ejemplo:

#create a table
CREATE TABLE `ms20`.`transactions` (
    `ID` INT NOT NULL AUTO_INCREMENT,
    `Product` VARCHAR(45) NOT NULL,
    `MonthOfTransaction` VARCHAR(20) NOT NULL,
    `AmountInUSD` INT NOT NULL,
    PRIMARY KEY (`ID`));

#insert data into a table
INSERT INTO ms20.transactions(Product, MonthOfTransaction, AmountInUSD) VALUES
('Air Conditioner', 'January', 500),
('Television', 'January', 600),
('Refrigerator', 'January', 550),
('Television', 'March', 600),
('Air Conditioner', 'March', 500),
('Juicer Machine', 'March', 200);

#select all data from the table
SELECT * FROM ms20.transactions;

Producción:

donde vs tener en mysql - datos de transacciones

la cláusula WHERE en MySQL

En MySQL, usamos la cláusula WHERE para filtrar los registros y extraer solo aquellas filas (registros) que cumplen la condición especificada. Podemos usarlo con declaraciones SELECT y los comandos UPDATE, INSERT y DELETE.

La cláusula WHERE se refiere a una condición particular colocada en las columnas seleccionadas al recuperar registros de tablas únicas o múltiples utilizando la cláusula JOIN. Podemos realizar operaciones lógicas en la cláusula WHERE, por ejemplo, AND, NOT, OR.

También podemos llamarlas condiciones booleanas que deben ser verdaderas al recuperar la información de la tabla (también llamada relación). Estos operadores lógicos utilizan operadores de comparación, incluidos <, >, <=, >=, = y <>.

Código de ejemplo:

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
WHERE Product in ( 'Television', 'Refrigerator')
GROUP BY Product;

Producción:

where vs tener en mysql - salida de la cláusula where

la cláusula HAVING en MySQL

En MySQL, la cláusula HAVING se combina con la cláusula GROUP BY. El objetivo de usar esta cláusula es hacer una operación de columna y aplicarla en datos agregados o grupos según las condiciones dadas.

La cláusula HAVING solo devuelve aquellos resultados de grupos que cumplen una determinada condición. Si las cláusulas WHERE y HAVING se usan juntas, WHERE filtra los registros individuales (filas).

Luego, se agrupan los registros (filas), se realizan los cálculos agregados y, finalmente, HAVING filtra los grupos. La cláusula HAVING comprueba la condición de los grupos que creó la cláusula GROUP BY.

En ausencia de la cláusula GROUP BY, la cláusula HAVING se comporta como la cláusula WHERE.

También podemos usar varias funciones agregadas combinando la cláusula HAVING con la instrucción SELECT. Los métodos agregados (grupo) incluyen SUM, MAX, MIN, COUNT y AVG.

Podemos usar fácilmente las funciones agregadas con la cláusula HAVING, mientras que obtendremos un error como uso no válido de la función de grupo si se usa con la cláusula WHERE.

Código de ejemplo (sin función agregada):

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
GROUP BY Product
HAVING Product in ('Television', 'Refrigerator');

Producción:

donde vs tener en mysql - tener salida de cláusula uno

Código de ejemplo (con función agregada):

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
GROUP BY Product
HAVING sum(AmountInUSD) > 800;

Producción:

donde vs tener en mysql - tener cláusula de salida dos

Es importante conocer el orden de ejecución cuando tenemos varias cláusulas en una consulta. Debemos recordar el orden FWGHSOL (empieza en F y termina en L) para saber la secuencia de ejecución donde F = DESDE, W = DONDE, G = GROUP BY, H = HAVING, S = SELECCIONAR, O = ORDENAR POR, y L = LÍMITE.

Diferencias entre las cláusulas WHERE y HAVING en MySQL

Debemos considerar los siguientes puntos al escribir las consultas para manipular datos.

La cláusula WHERE La cláusula HAVING
Implementado en las operaciones de fila (registro). Implementado en las operaciones de columna (atributo).
Realice la operación de filtro en las filas individuales antes de los cálculos agregados. Realice la operación de filtro en datos agregados (grupo).
Recupera los datos específicos de filas específicas que cumplen la condición dada. Primero recupera todos los datos y luego los separa según la condición especificada.
No podemos usar métodos agregados con esta cláusula. Podemos usar fácilmente métodos agregados con esta cláusula.
Se comporta como un prefiltro y va antes de la cláusula GROUP BY. Se comporta como un filtro posterior y viene después de la cláusula GROUP BY.
Se puede utilizar con las sentencias DELETE, SELECT y UPDATE. Solo se puede utilizar con la sentencia SELECT.
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - MySQL Query