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.
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:
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> SELECT * FROM employees WHERE working_hour > 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á
Se usarmos a consulta acima com o Agrupar por cláusula , obteremos o resultado diferente:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Aqui está o resultado:
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> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Obteremos o resultado abaixo, onde podemos ver o total de horas de trabalho de cada funcionário:
java e balanço
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.