Database
 sql >> Base de Dados >  >> RDS >> Database

Como usar a cláusula HAVING no SQL


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.