locked
Where e Having RRS feed

  • Pergunta

  • Qual a diferença de where e having

    e quando usar um  ou outro?

    obrigado

    segunda-feira, 10 de novembro de 2014 11:30

Respostas

Todas as Respostas

  • Oi jceoms,

    Entenda:

    Em alguns casos, você pode querer excluir linhas individuais de grupos (usando uma cláusula WHERE) antes de aplicar uma condição a grupos como um todo (utilizando uma cláusula HAVING).
    A cláusula HAVING é como uma cláusula WHERE, mas só se aplica a grupos como um todo (isto é, para as linhas no conjunto de resultados que representam grupos), ao passo que a cláusula WHERE aplica-se a linhas individuais. A consulta pode conter uma cláusula WHERE e uma cláusula HAVING. Nesse caso:
    A cláusula WHERE é aplicada pela primeira vez para as linhas individuais nas mesas ou objetos com valor de tabela no painel Diagrama. Apenas as linhas que atendem as condições na cláusula WHERE são agrupados.
    A cláusula HAVING é, então, aplicado para as linhas no conjunto de resultados. Apenas os grupos que se reúnem as condições TÊM aparecer na saída da consulta. Você pode aplicar uma cláusula HAVING apenas para colunas que também aparecem na cláusula GROUP BY ou em uma função de agregação.
    Por exemplo, imagine que você está juntando os títulos e tabelas editores para criar uma consulta que mostra o preço médio do livro por um conjunto de editoras. Você deseja ver o preço médio por apenas um conjunto específico de editores - talvez apenas os editores no estado da Califórnia. E mesmo assim, você quiser ver o preço médio apenas se for acima de US $ 10,00.
    Você pode estabelecer a primeira condição, incluindo uma cláusula WHERE, que descarta qualquer editores que não estão na Califórnia, antes de calcular os preços médios. A segunda condição requer um HAVING, porque a condição baseia-se nos resultados de agrupamento e resumindo os dados.

    Fonte: Fórum Microsoft


    Se o meu conteúdo resolveu o seu problema ou sua dúvida, então marque como "Resposta", ou se foi útil, "Vote". Pois isso ajudará outras pessoas com o mesmo problema ou dúvida.


    • Editado Alvesanderson segunda-feira, 10 de novembro de 2014 11:33 Alteração
    segunda-feira, 10 de novembro de 2014 11:33
  • Jceoms,

    Ambos são cláusulas utilizadas para "condições de pesquisa", porém o HAVING é utilizado para agrupamento de dados e o WHERE é usado em outras condições relacionadas à uma coluna específica ou à subqueries.

    Para maiores informações veja:

    http://msdn.microsoft.com/pt-br/library/ms189499.aspx

    http://msdn.microsoft.com/pt-br/library/ms180199.aspx

    http://msdn.microsoft.com/pt-br/library/ms188047.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"


    • Editado Durval RamosModerator segunda-feira, 10 de novembro de 2014 11:36 Adicionado link
    • Marcado como Resposta jceoms segunda-feira, 10 de novembro de 2014 11:40
    segunda-feira, 10 de novembro de 2014 11:36
    Moderador
  • Jceoms,

    O "Having" você usa junto com a clausula "Group By", ou seja, o filtro será aplicado ao resultado do grupo.

    Exemplo:

    create table #temp (id int, qtd int);
    insert #temp values
    (1,11),(1,12),(3,33),(4,44);
    
    select * from #temp;
    
    select * from #temp where qtd > 20;
    
    select id, sum(qtd) from #temp group by id having sum(qtd) > 20;


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    • Sugerido como Resposta Alvesanderson segunda-feira, 10 de novembro de 2014 11:51
    segunda-feira, 10 de novembro de 2014 11:45