Recomendado, 2024

Escolha Do Editor

Diferença entre onde e tendo cláusula em SQL

WHERE e cláusula HAVING são usadas principalmente na instrução de consultas SQL, estas permitem restringir a combinação na relação de resultado através do uso de um predicado específico. A principal diferença entre WHERE e HAVING é que a cláusula WHERE especifica as condições para selecionar as tuplas (linhas) das relações, incluindo condições de junção, se necessário. Por outro lado, a cláusula HAVING especifica uma condição nos grupos que estão sendo selecionados, e não em tuplas individuais.

SQL significa Linguagem de Consulta Estruturada ; é uma linguagem de banco de dados abrangente ou declarativa usada para acessar os dados dos bancos de dados.

Gráfico de comparação

Base para comparaçãoONDETENDO
BasicImplementado em operações de linha.Implementado em operações de coluna.
Aplicado aFila unicaLinha ou grupos resumidos.
Busca de dadosEle busca somente os dados específicos de linhas específicas de acordo com a condição.Primeiro, os dados completos são buscados e depois separados de acordo com a condição.
Funções agregadasNão pode aparecer na cláusula WHERE.Pode aparecer na cláusula HAVING.
Usado comSELECT e outras declarações, como UPDATE, DELETE ou qualquer uma delas.Não pode ser usado sem uma instrução SELECT.
Agir comoPré-filtroPós-filtro
GRUPO PORVem depois de ONDE.Vem depois de ter.

Definição da cláusula where

A cláusula SQL WHERE é usada para descrever uma condição no momento de recuperar os dados de uma única tabela ou unindo-se a várias tabelas. Apenas retorna o valor específico da tabela se a condição especificada for atendida. A cláusula WHERE é usada para permear os registros e recuperar apenas os registros necessários.

O SQL também implementa os conectivos lógicos e, ou e não na cláusula WHERE, que também são conhecidos como a condição booleana ; a condição deve ser verdadeira para recuperar as tuplas. Os operandos das expressões conectivas lógicas envolvem os operadores de comparação, como <, <=, >, > =, = e . Esses operadores de comparação comparam seqüências de caracteres e expressões aritméticas. Ele pode ser usado na instrução SELECT, bem como em instruções UPDATE, DELETE .

Vamos dar um exemplo. A tabela abaixo indicada como tabela ' Sales ' consiste nos atributos ' Product ' e ' Sales_amount '.

A consulta a seguir deve ser escrita para calcular o Total_sales do telefone e dos alto-falantes.

 SELECT Produto, soma (Sales_amount) AS Total_sales FROM Vendas WHERE Produto em ('Phone', 'Speakers') GROUP BY Produto; 

A saída a seguir é a saída resultante em que as linhas são filtradas primeiro, as linhas de telefone e de alto-falante são recuperadas e, em seguida, a função de agregação é executada.

Definição de ter cláusula

O SQL fornece a cláusula HAVING, que pode ser usada em conjunto com a cláusula GROUP BY . Esta cláusula HAVING ajuda na recuperação dos valores dos grupos que preenchem certas condições. Cláusula WHERE também pode usar em conjunto com cláusula HAVING durante a seleção, cláusula WHERE filtra a linha individual. As linhas são agrupadas e os cálculos agregados são executados; finalmente, a cláusula HAVING filtra os grupos.

Ele se comporta da mesma forma que WHERE quando a palavra-chave GROUP BY não é usada. As funções de grupo, como min, max, avg, sum e count, podem aparecer em apenas duas cláusulas: SELECT e HAVING. Ele fornece uma condição nas tuplas correspondentes a cada valor no grupo de atributos. O único conjunto de registros que satisfaz a condição será mostrado como resultado.

Aqui também estamos tomando o mesmo exemplo da cláusula WHERE e considerando a mesma tabela ' Sales '. Quando quisermos calcular o Total_sales do telefone e dos alto-falantes usando a cláusula HAVING, escreveremos a consulta a seguir.

 SELECT Produto, soma (Sales_amount) AS Total_sales FROM Vendas GROUP BY Produto HAVING Produto em ('phone', 'Speakers'); 

A consulta produz a seguinte saída, em que os produtos são recuperados primeiro, depois a função agregada (sum) é executada e, por último, os grupos são filtrados, ao contrário da cláusula WHERE.

Quando queremos encontrar apenas os produtos em que o Total_sales é maior que 1000. A consulta pode ser escrita como:

 SELECT Produto, soma (Sales_amount) AS Total_sales FROM Vendas GROUP BY Produto HAVING sum (Sales_amount)> 1000; 

A saída produzida é:

Isso não pode ser executado usando a cláusula WHERE apesar de HAVING e gera uma mensagem de erro porque a cláusula WHERE não pode ser usada com funções agregadas.

Principais diferenças entre onde e tendo cláusula

  1. A cláusula WHERE é empregada em operações de linha e aplicada em uma única linha, enquanto a cláusula HAVING é usada em operações de coluna e pode ser aplicada a linhas ou grupos compactados.
  2. Na cláusula WHERE, os dados desejados são buscados de acordo com a condição aplicada. Em contraste, a cláusula HAVING obtém dados inteiros e a separação é feita de acordo com a condição.
  3. Funções agregadas como min, sum, max, avg nunca podem aparecer junto com a cláusula WHERE. Em contrapartida, essas funções podem aparecer na cláusula HAVING.
  4. Cláusula HAVING não pode usar sem uma instrução SELECT. Por outro lado, WHERE pode ser usado com SELECT, UPDATE, DELETE, etc.
  5. A cláusula WHERE se comporta como um pré-filtro enquanto a cláusula HAVING atua como um pós-filtro.
  6. A cláusula WHERE, quando usada com o GROUP BY, vem antes do GROUP BY. Isso significa que as linhas do filtro WHERE antes dos cálculos agregados são executadas. Por outro lado, o HAVING vem depois do GROUP BY, o que significa que ele filtra após os cálculos agregados serem executados.

Conclusão

A cláusula WHERE e HAVING funciona da mesma maneira, exceto o recurso adicional pelo qual a cláusula HAVING é popular. A cláusula HAVING pode funcionar eficientemente com funções agregadas, enquanto o WHERE não pode ser operado com funções agregadas.

Top