Filtros com a cláusula HAVING
Autor: Prof.º Paulo Kaupa
Os filtros com a cláusula WHERE, são aplicados antes de realizar agrupamentos de dados. Quando deseja-se aplicar filtros nos grupos já criados, usa-se a cláusula HAVING. Por exemplo:
Deseja-se saber em qual estado uma empresa tem menos que 2 Empregados ou exatamente 2, para isso é necessário fazer um agrupamento de Empregados por Estado e então criar um filtro que traga apenas os estados em que a empresa tenha menos que 10 Empregados, para isso usa-se a cláusula HAVING.
ID_EMPREGADO |
NOME |
ID_ESTADO |
1 |
Empregado 01 |
1 |
2 |
Empregado 02 |
1 |
3 |
Empregado 03 |
1 |
4 |
Empregado 04 |
2 |
5 |
Empregado 05 |
3 |
6 |
Empregado 06 |
3 |
7 |
Empregado 07 |
4 |
ID_ESTDADO |
ESTADO |
1 |
São Paulo |
2 |
Rio de Janeiro |
3 |
Minas Gerais |
4 |
Acre |
Para melhor entendimento, a consulta será feita em duas etapas, primeiro realiza-se o agrupamento (Empregados por Estado) e em seguida aplica-se um filtro que retorne apenas os Estados em que a empresa possui menos ou 2 Empregados:
SELECT
COUNT(ID_ESTADO) AS QUANTIDADE,
ID_ESTADO
FROM
TB_EMPREGADO
GROUP BY ID_ESTADO
Com a execução do SELECT anterior tem-se o seguinte resultado:
Observe que a consulta retornou a quantidade total de Empregados para cada um dos 4 Estados presentes na TB_EMPREGADO.
No SELECT a seguir será acrescentado a cláusula HAVING para o filtro:
SELECT
COUNT(ID_ESTADO) AS QUANTIDADE,
ID_ESTADO
FROM
TB_EMPREGADO
GROUP BY ID_ESTADO
HAVING COUNT(ID_ESTADO) <= 2
O resultado da consulta anterior será apenas os estados que aparecem menos ou 2 vezes
Diferente do retorno da Consulta onde não foi aplicado o filtro com a cláusula HAVING, somente forma listados os Estados onde existem 2 ou menos Empregados alocados.
Exercícios Propostos
Qual a diferença entre a cláusula WHERE e a cláusula HAVING?
Crie uma tabela chamada TB_DEPENDENTE, com as seguintes colunas:
- ID_DEPENDENTE,
- NOME
- SEXO
Insira na TB_DEPENDENTE 10 Registros de sua escolha.
Elabore um Script que retorne a quantidade de Homens e de Mulheres (GROUP BY).
Elabore uma consulta que retorne apenas a quantidade de Mulheres (GROUP BY e WHERE).
Crie uma consulta que traga em tela o sexo que tem 6 ou mais registros (GROUP BY e HAVING).
Crie uma consulta que traga em tela o sexo que tem menos de 6 registros (GROUP BY e HAVING).