Neste artigo, aprenderemos sobre o conceito da cláusula HAVING e como usá-la no SQL.
O que é a cláusula HAVING?
Na linguagem de consulta estruturada, a cláusula HAVING usada com a cláusula GROUP BY especifica as condições que filtram os resultados que aparecem na saída. Ele retorna apenas os dados do grupo que atendem às condições.
Com a cláusula HAVING, podemos usar a cláusula WHERE também na consulta. Se usarmos Ambas as cláusulas juntas, a cláusula WHERE será executada primeiro, onde filtrará as linhas individuais, depois as linhas serão agrupadas e, no final, a cláusula HAVING filtra os grupos.
As condições da cláusula HAVING são colocadas após a cláusula GROUP BY. A cláusula HAVING se comportou da mesma forma que a cláusula WHERE na Linguagem de Consulta Estruturada não usa a cláusula GROUP BY. Podemos usar funções agregadas como MIN, MAX, SUM, AVG e COUNT. Esta função é usada apenas com a cláusula SELECT e a cláusula HAVING.
Sintaxe da cláusula HAVING:
SELECT COLUMNS, AGGREGATE FUNCTION, FROM TABLENAME WHERE CONDITION GROUP BY COLUMN HAVING CONDITIONS;
Existem alguns passos que temos que aprender sobre como usar a cláusula HAVING na consulta SQL:
1. Crie um novo banco de dados ou use um banco de dados existente selecionando o banco de dados usando a palavra-chave USE seguida do nome do banco de dados.
2. Crie uma nova tabela dentro do banco de dados selecionado, ou você pode usar uma tabela já criada.
3. Se a tabela for criada nova, insira os registros no banco de dados recém-criado usando a consulta INSERT e visualize os dados inseridos usando a consulta SELECT sem a cláusula HAVING.
4. Agora, estamos prontos para usar a cláusula HAVING nas consultas SQL.
Etapa 1:crie um novo banco de dados ou use um banco de dados já criado.
Já criei um banco de dados. Usarei meu nome de banco de dados criado existente.
USE SCHOOL;
Escola é o nome do banco de dados.
Quem não criou um banco de dados, siga a consulta abaixo para criar o banco de dados:
CREATE DATABASE database_name;
Após criar o banco de dados, selecione o banco de dados usando a palavra-chave USE seguida do nome do banco de dados.
Etapa 2:crie uma nova tabela ou use uma tabela já existente:
Já criei uma tabela. Vou usar a tabela existente chamada Aluno.
Para criar as novas tabelas siga abaixo a sintaxe CREATE TABLE:
CREATE TABLE table_name(
columnname1 datatype(column size),
columnname2 datatype(column size),
columnname3 datatype(column size)
);
Etapa 3:insira os registros na tabela recém-criada usando a consulta INSERT e visualize os registros usando a consulta SELECT.
Use a sintaxe abaixo para inserir novos registros na tabela:
INSERT INTO table_name VALUES(value1, value2, value3);
Para visualizar os registros da tabela usando a sintaxe abaixo:
SELECT * FROM table_name;
A consulta a seguir exibirá os registros de Funcionários
SELECT * FROM Student;
A saída da consulta SELECT acima é:
ID_ESTUDANTE | ESTUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
1 | NEHA | 85 | 88 | 100 | 273 |
2 | VISHAL | 70 | 90 | 82 | 242 |
3 | SAMKEET | 75 | 88 | 96 | 259 |
4 | NIQUIL | 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 | PRAQUI | 90 | 80 | 75 | 245 |
Etapa 4:estamos prontos para usar a cláusula HAVING na linguagem de consulta estruturada.
Vamos agora mergulhar fundo na cláusula HAVING com a ajuda de exemplos.
Temos uma tabela chamada Aluno que contém os seguintes registros.
ID_ESTUDANTE | ESTUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
1 | NEHA | 85 | 88 | 100 | 273 |
2 | VISHAL | 70 | 90 | 82 | 242 |
3 | SAMKEET | 75 | 88 | 96 | 259 |
4 | NIQUIL | 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 | PRAQUI | 90 | 80 | 75 | 245 |
Exemplo 1: Escreva uma consulta para exibir a soma das notas de física onde a soma das notas de física for maior que 60 grupos por ID do aluno.
SELECT STUDENT_ID, STUDENT_NAME, SUM(PHYSICS_MARKS) AS PHYSICS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING SUM(PHYSICS_MARKS) > 60;
Na consulta acima, pegamos uma função agregada chamada SUM() seguida pelo nome da coluna physics_marks, que somará a coluna. Primeiro Sum(physics_marks) é executado, então a condição da cláusula HAVING é executada no final, e o resultado final será exibido. Usamos a cláusula GROUP BY seguida do nome da coluna Student_Id para agrupar os mesmos valores e considerá-los um grupo. Se os valores não forem iguais, nenhum grupo será formado para valores. E no final, usamos a cláusula HAVING onde colocamos a condição que ajudará a exibir apenas os detalhes do aluno em que a soma das notas de física for maior que 60. Se as notas de física do aluno forem menores que 60, não exibirá o registros.
A saída da consulta acima é:
ID_ESTUDANTE | ESTUDENT_NAME | PHYSICS_MARKS |
1 | NEHA | 85 |
2 | VISHAL | 70 |
3 | SAMKEET | 75 |
6 | ANKITA | 95 |
7 | SONAM | 98 |
8 | VINEET | 85 |
9 | SANKET | 86 |
10 | PRAQUI | 90 |
Como podemos ver na saída, apenas os IDs, nomes e notas de física dos alunos são exibidos onde a soma das notas de física é maior que 60. Como usamos a cláusula GROUP BY e nenhum valor é semelhante, eles são contados como um único grupo .
Exemplo 2: Escreva uma consulta para exibir as notas máximas de notas de química onde uma nota máxima de notas de química é inferior a 90 grupos por identificação do aluno.
SELECT STUDENT_ID, STUDENT_NAME, MAX(CHEMISTRY_MARKS) AS CHEMISTRY_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MAX(CHEMISTRY_MARKS) < 90;
Na consulta acima, pegamos uma função agregada chamada MAX() seguida pelo nome da coluna chemistry_marks, que encontrará as marcas máximas da coluna. Usamos a cláusula GROUP BY seguida do nome da coluna Student_Id para agrupar os mesmos valores e considerá-los um grupo. Se os valores não forem os mesmos, um grupo separado será formado para valores. E no final, usamos a cláusula HAVING onde colocamos a condição que ajudará a exibir apenas os detalhes do aluno onde a nota máxima de notas de química for menor que 90. Se as notas de química do aluno forem maiores que 90, não será exibir os registros. Primeiro, MAX(chemistry_marks) é executado, então a condição da cláusula HAVING é executada no final e o resultado final será exibido. A saída da consulta acima é:
ID_ESTUDANTE | ESTUDENT_NAME | CHEMISTRY_MARKS |
1 | NEHA | 88 |
3 | SAMKEET | 88 |
4 | NIQUIL | 75 |
5 | YOGESH | 65 |
6 | ANKITA | 85 |
7 | SONAM | 89 |
9 | SANKET | 78 |
10 | PRAQUI | 80 |
Como podemos ver na saída, apenas os IDs dos alunos, nomes e notas de química são exibidos onde a nota máxima de notas de química é menor que 90. Como usamos a cláusula GROUP BY e nenhum valor é semelhante, eles são contados como um único grupo.
Exemplo 3: Escreva uma consulta para exibir as notas de matemática em que uma nota mínima de notas de matemática é maior que 70 grupos por ID do aluno.
SELECT STUDENT_ID, STUDENT_NAME, MIN(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MIN(MATHS_MARKS) >70;
Na consulta acima, pegamos uma função agregada chamada MIN() seguida pelo nome da coluna maths_marks, que encontrará as marcas mínimas da coluna. Usamos a cláusula GROUP BY seguida do nome da coluna Student_Id para agrupar os mesmos valores e considerá-los um grupo. Se os valores não forem os mesmos, um grupo separado será formado para valores. E no final, usamos a cláusula HAVING onde colocamos a condição que ajudará a exibir apenas os detalhes do aluno onde a nota mínima de notas de matemática for maior que 70. Se as notas de matemática do aluno forem menores que 70, não será exibir os registros. Primeiro, MIN(maths_marks) é executado, então a condição da cláusula HAVING é executada no final e o resultado final será exibido.
A saída da consulta acima é:
ID_ESTUDANTE | ESTUDENT_NAME | MATHS_MARKS |
1 | NEHA | 100 |
2 | VISHAL | 82 |
3 | SAMKEET | 96 |
4 | NIQUIL | 80 |
5 | YOGESH | 78 |
6 | ANKITA | 96 |
7 | SONAM | 100 |
8 | VINEET | 100 |
10 | PRAQUI | 75 |
Como podemos ver na saída, apenas os IDs, nomes e notas matemáticas dos alunos são exibidos onde a nota mínima de notas matemáticas é maior que 70. Como usamos a cláusula GROUP BY e nenhum valor é semelhante, eles são contados como um único grupo.
Exemplo 4: Escreva uma consulta para exibir os detalhes do aluno onde as notas mínimas de física são maiores que 56, E as notas máximas de matemática são menores que 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 funções de agregação dupla em uma única consulta min() e max() na consulta acima. Min() é usado para descobrir as notas mínimas de física e Max() é usado para descobrir as notas máximas de matemática. Primeiro, a consulta encontrará as marcas min() e max() de física e matemática da tabela do aluno. Como usamos a cláusula GROUP BY, valores semelhantes mapeados como um grupo, senão os valores serão separados. Como nenhum valor é semelhante na tabela, todos os valores foram separados. Nenhum valor será mapeado como um grupo. Em seguida, usamos a cláusula HAVING, que funciona como cláusula WHERE, diferenciando apenas a cláusula HAVING mapeada no grupo. Primeiro, a condição é MIN(PHYSICS_MARKS)> 58. Como nenhum valor é semelhante, cada valor será considerado como valor mínimo e comparado com a condição, a mesma abordagem é usada para MAX(MATHS_MARKS). Como usamos o operador AND na consulta, essas condições atendem às duas condições. Apenas os registros desses alunos são exibidos no resultado final.
A saída da consulta acima é:
ID_ESTUDANTE | ESTUDENT_NAME | PHYSICS_MARKS | MATHS_MARKS |
2 | VISHAL | 70 | 82 |
3 | SAMKEET | 75 | 96 |
4 | NIQUIL | 60 | 80 |
6 | ANKITA | 95 | 96 |
9 | SANKET | 86 | 65 |
10 | PRAQUI | 90 | 75 |
Como podemos ver na saída, apenas os registros dos alunos são exibidos onde as notas mínimas dos valores de física são maiores que 56, E as notas máximas de matemática são menores que 98.
No exemplo acima, se for usado o operador OR em vez do operador AND, todos os dez registros serão exibidos porque o operador OR diz que se uma condição falhar e outras condições forem verdadeiras, os registros da tabela atenderão às condições.