SQL é a linguagem padrão para trabalhar com bancos de dados relacionais. Ele tem em seu arsenal de muitas ferramentas poderosas para manipular dados armazenados na forma de tabelas.
Sem dúvida, a capacidade de agrupar dados comsua amostragem por um determinado recurso é uma dessas ferramentas. A instrução SQL HAVING, juntamente com a cláusula WHERE, permite definir as condições de amostragem para dados já agrupados de alguma forma.
Em primeiro lugar, deve-se notar que este parâmetroé opcional e é usado exclusivamente em conjunto com o parâmetro GROUP BY. Como você se lembra, o GROUP BY é usado quando o SELECT usa funções agregadas, e os resultados de seus cálculos precisam ser obtidos por determinados grupos. Se WHERE permitir que você defina as condições para uma seleção antes que os dados sejam agrupados, HAVING contém as condições relacionadas aos dados já existentes nos próprios grupos. Para uma melhor compreensão, vamos dar uma olhada no exemplo com o diagrama mostrado na figura abaixo.
Este é um ótimo exemplo, dando uma descrição do HAVING SQL. Uma tabela é fornecida com uma lista de nomes de produtos, empresas que os produzem e alguns outros campos. Na consulta no canto superior direito, estamos tentando obter informações sobre quantos nomes de produtos cada empresa produz, enquanto queremos produzir apenas as empresas que produzem mais de dois títulos. O parâmetro GROUP BY formou três grupos correspondentes aos nomes das empresas, para cada um deles foi calculado o número de produtos (linhas). Mas o parâmetro HAVING, por sua condição, cortou um grupo da amostra resultante, porque não satisfez a condição. Como resultado, temos dois grupos, correspondentes a empresas com o número de produtos 5 e 3.
Uma pergunta pode surgir sobre por que usarTENDO se houver um WHERE in SQL. Se usássemos WHERE, veríamos o número total de linhas na tabela, não em grupos, e a condição não faria sentido nesse caso. No entanto, muitas vezes eles coexistem perfeitamente em um pedido.
No exemplo acima, podemos ver como, primeiroHá uma seleção de dados sobre os nomes dos funcionários especificados no parâmetro WHERE e, em seguida, o resultado agrupado em GROUP BY passa uma verificação adicional sobre o valor do salário de cada funcionário.
Vamos considerar alguns recursos da sintaxeTENDO SQL. A descrição desse parâmetro é bem simples. Primeiro, como já foi observado, ele é usado exclusivamente em conjunto com o parâmetro GROUP BY e é especificado imediatamente depois dele e antes de ORDER BY, se houver um na consulta. É compreensível, uma vez que HAVING define as condições para os dados já agrupados. Em segundo lugar, na condição desse parâmetro, você só pode usar as funções agregadas e os campos especificados no parâmetro GROUP BY. Todas as condições neste parâmetro são especificadas exatamente da mesma maneira que no caso de WHERE.
Como você pode ver, nada complicado neste operadornão Semanticamente, é usado da mesma maneira que WHERE. É importante entender que WHERE é usado em relação a todos os dados selecionáveis, e HAVING é apenas relativo aos grupos definidos no parâmetro GROUP BY. Apresentamos uma descrição abrangente do HAVING SQL, que é suficiente para um trabalho confiante com ele.
</ p>