logo

Diferença entre ONDE e TER

As cláusulas WHERE e HAVING são discutidas em profundidade neste artigo. Eles também são usados ​​para filtrar registros em consultas SQL. A diferença entre a cláusula WHERE e HAVING é a pergunta mais comum feita durante uma entrevista. A principal diferença entre eles é que a cláusula WHERE é usada para especificar uma condição para filtrar registros antes de qualquer agrupamento ser feito, enquanto a cláusula HAVING é usada para especificar uma condição para filtrar valores de um grupo. Antes de fazer a comparação, primeiro conheceremos esses SQL cláusulas.

ONDE vs TER

Cláusula ONDE

A cláusula WHERE no MySQL é usada com SELECT , INSERIR , ATUALIZAR , e EXCLUIR consultas para filtrar dados da tabela ou relação. Ele descreve uma condição específica ao recuperar registros de uma única tabela ou de várias tabelas usando a cláusula JOIN. Se a condição especificada for satisfeita, ele retornará o valor específico da tabela. A cláusula WHERE coloca condições nas colunas selecionadas.

A cláusula WHERE no MySQL também pode implementar os conectivos lógicos E, OU e NÃO. Eles são conhecidos como a condição booleana que deve ser verdadeiro para recuperar os dados. As expressões de conectivos lógicos usam os operadores de comparação como seus operandos, como<, ,>=, = e . Os operadores de comparação geralmente são usados ​​para comparar strings e expressões aritméticas.

tipos de rede

A sintaxe a seguir ilustra o uso da cláusula WHERE:

 SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists; 

Tomemos um exemplo para entender esta cláusula. Suponha que temos uma tabela chamada funcionários que contém os seguintes dados:

ONDE vs TER

Se nós quisermos para obter os detalhes do funcionário cujas horas de trabalho são superiores a 9 , então podemos usar a instrução da seguinte forma:

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9; 

Obteremos o resultado abaixo, onde podemos ver os detalhes dos funcionários cujas horas de trabalho são superiores a 9:

programa java olá
ONDE vs TER

Se usarmos a consulta acima com o Agrupar por cláusula , obteremos o resultado diferente:

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9 GROUP BY name; 

Aqui está o resultado:

ONDE vs TER

Cláusula TENDO

Cláusula HAVING no MySQL usado em conjunto com GROUP BY A cláusula nos permite especificar condições que filtram quais resultados de grupo aparecem no resultado. Ele retorna apenas os valores dos grupos no resultado final que atendem a determinadas condições. Também podemos usar as cláusulas WHERE e HAVING juntas durante a seleção. Nesse caso, a cláusula WHERE primeiro filtra as linhas individuais, depois as linhas são agrupadas, executa cálculos agregados e, por fim, a cláusula HAVING filtra os grupos.

Esta cláusula impõe condições aos grupos criados pela cláusula GROUP BY. Ela se comporta como a cláusula WHERE quando a instrução SQL não usa a palavra-chave GROUP BY. Podemos usar funções agregadas (grupo), como SUM, MIN, MAX, AVG e CONTAR apenas com duas cláusulas: SELECT e HAVING.

A sintaxe a seguir ilustra o uso da cláusula HAVING:

 SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition; 

Tomemos um exemplo para entender esta cláusula. Aqui estamos considerando a mesma tabela funcionários para demonstração.

Se nós quisermos para obter o total de horas de trabalho de cada funcionário cujo tempo de trabalho é superior a 6 horas , então podemos usar a instrução da seguinte forma:

 mysql&gt; SELECT name, SUM(working_hour) AS &apos;Total working hours&apos; FROM employees GROUP BY name HAVING SUM(working_hour) &gt; 6; 

Obteremos o resultado abaixo, onde podemos ver o total de horas de trabalho de cada funcionário:

java e balanço
ONDE vs TER

Principais diferenças entre a cláusula WHERE e HAVING

Os pontos a seguir explicam as principais diferenças entre banco de dados e esquema:

  • A cláusula WHERE filtra linhas individuais, enquanto a cláusula HAVING filtra grupos em vez de uma linha por vez.
  • Não podemos usar a cláusula WHERE com funções agregadas porque ela funciona para filtrar linhas individuais. Por outro lado, HAVING pode funcionar com funções agregadas porque é usado para filtrar grupos.
  • As operações de linha são tratadas pela cláusula WHERE, enquanto a cláusula HAVING trata as operações de coluna para linhas ou grupos resumidos.
  • WHERE vem antes de GROUP BY, o que significa que a cláusula WHERE filtra as linhas antes de realizar cálculos agregados. HAVING vem depois de GROUP BY, o que significa que a cláusula HAVING filtra as linhas após realizar cálculos agregados. Consequentemente, HAVING é mais lento que WHERE em termos de eficiência e deve ser evitado sempre que possível.
  • Podemos combinar as cláusulas WHERE e HAVING em uma consulta SELECT. Nesse caso, a cláusula WHERE é usada primeiro para filtrar linhas individuais. As linhas são então agrupadas, realizam cálculos agregados e, por fim, a cláusula HAVING é usada para filtrar os grupos.
  • A cláusula WHERE recupera os dados desejados com base na condição especificada. Por outro lado, a cláusula HAVING primeiro busca os dados inteiros e depois a separação é feita com base na condição especificada.
  • Sem uma instrução SELECT, não podemos usar a cláusula HAVING. Por outro lado, podemos usar WHERE com instruções SELECT, UPDATE e DELETE.
  • A cláusula WHERE é um pré-filtro, enquanto a cláusula HAVING é um pós-filtro.

Gráfico de comparação ONDE vs. TER

O gráfico de comparação a seguir explica suas principais diferenças de maneira rápida:

Base de comparação Cláusula ONDE Cláusula TENDO
Definição É usado para realizar filtração em linhas individuais. É usado para realizar filtração em grupos.
Básico É implementado em operações de linha. É implementado em operações de coluna.
Busca de dados A cláusula WHERE busca os dados específicos de linhas específicas com base na condição especificada A cláusula HAVING primeiro busca os dados completos. Em seguida, os separa de acordo com a condição dada.
Funções agregadas A cláusula WHERE não permite trabalhar com funções agregadas. A cláusula HAVING pode funcionar com funções agregadas.
Agir como A cláusula WHERE atua como um pré-filtro. A cláusula HAVING atua como um pós-filtro.
Usado com Podemos usar a cláusula WHERE com as instruções SELECT, UPDATE e DELETE. A cláusula HAVING só pode ser usada com a instrução SELECT.
Agrupar por A cláusula GROUP BY vem depois da cláusula WHERE. A cláusula GROUP BY vem antes da cláusula HAVING.

Conclusão

Neste artigo, fizemos uma comparação entre as cláusulas WHERE e HAVING. Aqui, concluímos que ambas as cláusulas funcionam da mesma maneira na filtragem dos dados, exceto que alguns recursos adicionais tornam a cláusula HAVING mais popular. Podemos trabalhar de forma eficiente com funções agregadas na cláusula HAVING, enquanto WHERE não permite funções agregadas.