As cláusulas `where` e` tendo 'em SQL servem a propósitos diferentes, embora ambos filtrem linhas com base nas condições. Aqui está um colapso:
onde cláusula *
Objetivo: Filtros linhas
antes de Quaisquer operações de agregação (como `sum`,` avg`, `count` etc.).
*
aplica -se a: Linhas individuais.
*
Condições: Normalmente envolve comparações e operadores lógicos que operam em colunas individuais dentro da tabela.
*
Exemplo: `` `SQL
Selecione * de clientes onde país ='EUA';
`` `
Esta consulta recupera todos os clientes da tabela de 'clientes', onde a coluna 'país' é igual a 'EUA'.
tendo cláusula *
Objetivo: Filtros linhas
depois de operações de agregação.
*
aplica -se a: Os resultados da agregação (grupo por).
*
Condições: Normalmente envolve comparações de valores agregados usando funções agregadas (por exemplo, `soma (preço)`, `avg (idade)`, `count (*)`) em combinação com operadores lógicos.
*
Exemplo: `` `SQL
Selecione City, AVG (idade) como média
De clientes
Grupo por cidade
Tendo médio_age> 30;
`` `
Esta consulta agrupa clientes por 'cidade' e calcula a idade média de cada cidade. Em seguida, filtra os resultados para mostrar apenas cidades onde a idade média é maior que 30.
Diferenças -chave em poucas palavras: *
tempo: `Onde 'filtros antes da agregação,` tendo' filtros depois.
* Escopo: `Onde 'trabalha em linhas individuais,` tendo' trabalha em resultados agregados.
*
Condições: `Where` usa condições em colunas individuais,` tendo `usa condições em valores agregados.
Quando usar cada cláusula: * Use `where` quando você deseja filtrar dados com base nos valores individuais da linha antes que qualquer agregação ocorra.
* Use `tendo` quando deseja filtrar resultados agregados (como dados agrupados) com base em condições que envolvem valores agregados.
Nota: Você pode usar as cláusulas `where` e` tendo` na mesma consulta, mas `where 'é aplicado primeiro para filtrar as linhas usadas para agregação e, em seguida,` tendo' é usado para filtrar os resultados agregados.