sql >> Base de Datos >  >> RDS >> Database

Cómo usar la cláusula HAVING en SQL

En este artículo, aprenderemos sobre el concepto de la cláusula HAVING y cómo usarlo en SQL.

¿Qué es la cláusula HAVING?

En el lenguaje de consulta estructurado, la cláusula HAVING utilizada con la cláusula GROUP BY especifica las condiciones que filtran los resultados que aparecen en la salida. Devuelve solo aquellos datos del grupo que cumple las condiciones.

Con la cláusula HAVING, podemos usar la cláusula WHERE también en la consulta. Si usamos ambas cláusulas juntas, la cláusula WHERE se ejecutará primero donde filtrará las filas individuales, luego las filas se agrupan y al final, la cláusula HAVING filtra los grupos.

Las condiciones de la cláusula HAVING se colocan después de la cláusula GROUP BY. La cláusula HAVING se comportó igual que la cláusula WHERE en el lenguaje de consulta estructurado que no usa la cláusula GROUP BY. Podemos usar funciones agregadas como MIN, MAX, SUM, AVG y COUNT. Esta función solo se usa con la cláusula SELECT y la cláusula HAVING.

Sintaxis de la cláusula HAVING:

SELECT COLUMNS, AGGREGATE FUNCTION, FROM TABLENAME WHERE CONDITION GROUP BY COLUMN HAVING CONDITIONS; 

Hay algunos pasos que tenemos que aprender sobre cómo usar la cláusula HAVING en la consulta SQL:

1. Cree una nueva base de datos o use una base de datos existente seleccionando la base de datos usando la palabra clave USE seguida del nombre de la base de datos.

2. Cree una nueva tabla dentro de la base de datos seleccionada, o puede usar una tabla ya creada.

3. Si la tabla se crea nueva, inserte los registros en la base de datos recién creada usando la consulta INSERT y vea los datos insertados usando la consulta SELECT sin la cláusula HAVING.

4. Ahora, estamos listos para usar la cláusula HAVING en las consultas SQL.

Paso 1:Cree una nueva base de datos o use una base de datos ya creada.

Ya he creado una base de datos. Usaré el nombre de mi base de datos creada existente.

USE SCHOOL;

Escuela es el nombre de la base de datos.

Aquellos que no hayan creado una base de datos, sigan la siguiente consulta para crear la base de datos:

CREATE DATABASE database_name;

Después de crear la base de datos, seleccione la base de datos usando la palabra clave USE seguida del nombre de la base de datos.

Paso 2:Cree una nueva tabla o utilice una tabla existente:

Ya he creado una tabla. Usaré la tabla existente llamada Student.

Para crear las nuevas tablas, siga la siguiente sintaxis CREATE TABLE:

CREATE TABLE table_name(

columnname1 datatype(column size),

columnname2 datatype(column size),

columnname3 datatype(column size)

);

Paso 3:inserte los registros en la tabla recién creada usando la consulta INSERT y visualice los registros usando la consulta SELECT.

Use la siguiente sintaxis para insertar nuevos registros en la tabla:

INSERT INTO table_name VALUES(value1, value2, value3);

Para ver los registros de la tabla usando la siguiente sintaxis:

SELECT * FROM table_name;

La siguiente consulta mostrará los registros de Empleados

SELECT * FROM Student;

El resultado de la consulta SELECT anterior es:

STUDENT_ID NOMBRE_ESTUDIANTE PHYSICS_MARKS MARCAS_QUÍMICAS MATHS_MARKS TOTAL_MARCAS
1 NEHA 85 88 100 273
2 VISHAL 70 90 82 242
3 SAMKEET 75 88 96 259
4 NIKHIL 60 75 80 215
5 YOGESH 56 65 78 199
6 ANKITA 95 85 96 276
7 SONAM 98 89 100 287
8 VINEET 85 90 100 275
9 SANKET 86 78 65 229
10 PRACHI 90 80 75 245

Paso 4:estamos listos para usar la cláusula HAVING en el lenguaje de consulta estructurado.

Ahora profundizaremos en la cláusula HAVING con la ayuda de ejemplos.

Tenemos una tabla llamada Estudiante que contiene los siguientes registros.

STUDENT_ID NOMBRE_ESTUDIANTE PHYSICS_MARKS MARCAS_QUÍMICAS MATHS_MARKS TOTAL_MARCAS
1 NEHA 85 88 100 273
2 VISHAL 70 90 82 242
3 SAMKEET 75 88 96 259
4 NIKHIL 60 75 80 215
5 YOGESH 56 65 78 199
6 ANKITA 95 85 96 276
7 SONAM 98 89 100 287
8 VINEET 85 90 100 275
9 SANKET 86 78 65 229
10 PRACHI 90 80 75 245

Ejemplo 1: Escriba una consulta para mostrar la suma de notas de física donde la suma de notas de física es mayor que 60 grupos por ID de estudiante.

SELECT STUDENT_ID, STUDENT_NAME, SUM(PHYSICS_MARKS) AS PHYSICS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING SUM(PHYSICS_MARKS) > 60;

En la consulta anterior, hemos tomado una función agregada llamada SUM() seguida del nombre de columna physics_marks, que sumará la columna. Primero se ejecuta Sum(physics_marks), luego se ejecuta la condición de la cláusula HAVING al final, y se mostrará el resultado final. Hemos utilizado la cláusula GROUP BY seguida del nombre de columna Student_Id para agrupar los mismos valores y considerarlos un grupo. Si los valores no son los mismos, no se formará ningún grupo para los valores. Y al final, hemos usado la cláusula HAVING donde ponemos la condición que ayudará a mostrar solo los detalles de los estudiantes donde la suma de las calificaciones de física es mayor a 60. Si las calificaciones de física de los estudiantes son menores a 60, no mostrará el registros.

El resultado de la consulta anterior es:

STUDENT_ID NOMBRE_ESTUDIANTE PHYSICS_MARKS
1 NEHA 85
2 VISHAL 70
3 SAMKEET 75
6 ANKITA 95
7 SONAM 98
8 VINEET 85
9 SANKET 86
10 PRACHI 90

Como podemos ver en el resultado, solo se muestran las identificaciones, los nombres y las calificaciones de física de los estudiantes donde la suma de las calificaciones de física es superior a 60. Como usamos la cláusula GROUP BY y ningún valor es similar, se cuentan como un solo grupo. .

Ejemplo 2: Escriba una consulta para mostrar las calificaciones máximas de calificaciones de química donde una calificación máxima de calificaciones de química es inferior a 90 grupos por ID de estudiante.

SELECT STUDENT_ID, STUDENT_NAME, MAX(CHEMISTRY_MARKS) AS CHEMISTRY_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MAX(CHEMISTRY_MARKS) < 90;  

En la consulta anterior, hemos tomado una función agregada llamada MAX() seguida por el nombre de columna chemistry_marks, que encontrará las marcas máximas de la columna. Hemos utilizado la cláusula GROUP BY seguida del nombre de columna Student_Id para agrupar los mismos valores y considerarlos un grupo. Si los valores no son los mismos, se formará un grupo separado para los valores. Y al final, hemos usado la cláusula HAVING donde ponemos la condición que ayudará a mostrar solo los detalles de los estudiantes donde la calificación máxima de química es inferior a 90. Si las calificaciones de química de los estudiantes son superiores a 90, no lo hará. mostrar los registros. Primero, se ejecuta MAX(chem_marks), luego se ejecuta la condición de la cláusula HAVING al final y se mostrará el resultado final. El resultado de la consulta anterior es:

STUDENT_ID NOMBRE_ESTUDIANTE MARCAS_QUÍMICAS
1 NEHA 88
3 SAMKEET 88
4 NIKHIL 75
5 YOGESH 65
6 ANKITA 85
7 SONAM 89
9 SANKET 78
10 PRACHI 80

Como podemos ver en el resultado, solo se muestran las identificaciones, los nombres y las calificaciones de química de los estudiantes donde la calificación máxima de calificaciones de química es inferior a 90. Como usamos la cláusula GROUP BY y ningún valor es similar, se cuentan como una sola grupo.

Ejemplo 3: Escriba una consulta para mostrar las calificaciones de matemáticas donde una calificación mínima de calificaciones de matemáticas sea superior a 70 grupos por ID de estudiante.

SELECT STUDENT_ID, STUDENT_NAME, MIN(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MIN(MATHS_MARKS) >70;

En la consulta anterior, hemos tomado una función agregada llamada MIN() seguida del nombre de columna maths_marks, que encontrará las marcas mínimas de la columna. Hemos utilizado la cláusula GROUP BY seguida del nombre de columna Student_Id para agrupar los mismos valores y considerarlos un grupo. Si los valores no son los mismos, se formará un grupo separado para los valores. Y al final, hemos usado la cláusula HAVING donde ponemos la condición que ayudará a mostrar solo los detalles del estudiante donde la calificación mínima de matemáticas es mayor a 70. Si las calificaciones de matemáticas del estudiante son menores a 70, no lo hará. mostrar los registros. Primero, se ejecuta MIN(maths_marks), luego se ejecuta la condición de la cláusula HAVING al final y se mostrará el resultado final.

El resultado de la consulta anterior es:

STUDENT_ID NOMBRE_ESTUDIANTE MATHS_MARKS
1 NEHA 100
2 VISHAL 82
3 SAMKEET 96
4 NIKHIL 80
5 YOGESH 78
6 ANKITA 96
7 SONAM 100
8 VINEET 100
10 PRACHI 75

Como podemos ver en el resultado, solo se muestran las identificaciones, los nombres y las calificaciones matemáticas de los estudiantes donde la calificación mínima de las calificaciones matemáticas es superior a 70. Como usamos la cláusula GROUP BY y ningún valor es similar, se cuentan como una sola grupo.

Ejemplo 4: Escriba una consulta para mostrar los detalles de los estudiantes donde las calificaciones mínimas de física son superiores a 56, Y las calificaciones máximas de matemáticas son inferiores a 98.

SELECT STUDENT_ID, STUDENT_NAME, MIN(PHYSICS_MARKS) AS PHYSICS_MARKS , MAX(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MIN(PHYSICS_MARKS) >58 AND MAX(MATHS_MARKS)<98;

Usamos funciones de agregado doble en una sola consulta min() y max() en la consulta anterior. Min() se usa para encontrar las notas mínimas de física y Max() se usa para encontrar las notas máximas de matemáticas. Primero, la consulta encontrará las marcas min() y max() de física y matemáticas de la tabla de estudiantes. Como usamos la cláusula GROUP BY, los valores similares se asignan como un grupo, de lo contrario, los valores estarán separados. Como ningún valor es similar en la tabla, todos los valores se han separado. Ningún valor se asignará como un grupo. A continuación, usamos la cláusula HAVING, que funciona como cláusula WHERE a diferencia de la cláusula HAVING asignada al grupo. En primer lugar, la condición es MIN(PHYSICS_MARKS)> 58. Como ningún valor es similar, cada valor se considerará como valor mínimo y, en comparación con la condición, se utiliza el mismo enfoque para MAX(MATHS_MARKS). Como usamos el operador AND en la consulta, esas condiciones cumplen ambas condiciones. Solo los registros de esos estudiantes se muestran en el resultado final.

El resultado de la consulta anterior es:

STUDENT_ID NOMBRE_ESTUDIANTE PHYSICS_MARKS MATHS_MARKS
2 VISHAL 70 82
3 SAMKEET 75 96
4 NIKHIL 60 80
6 ANKITA 95 96
9 SANKET 86 65
10 PRACHI 90 75

Como podemos ver en el resultado, solo se muestran los registros de los estudiantes donde las calificaciones mínimas de los valores de física son mayores a 56, Y las calificaciones máximas de matemáticas son menores a 98.

En el ejemplo anterior, si se usa el operador OR en lugar del operador AND, se muestran los diez registros porque el operador OR dice que si una condición falla y otras condiciones son verdaderas, entonces los registros de la tabla cumplen las condiciones.