SQL tendo vs onde

SQL tendo vs onde
Em alguns casos, você pode encontrar casos em que precisa filtrar registros de um banco de dados usando a cláusula WHERE. Isso permite especificar uma condição específica e aplicar apenas as ações definidas a linhas que correspondem às condições.

Outro caso de uso típico é quando você precisa aplicar um filtro a um grupo de registros como uma unidade. É aí que entra a cláusula de ter. É semelhante à cláusula onde, mas pode ser aplicada a um resultado agregado.

Qual é a diferença?

Há apenas uma diferença entre o lugar e ter cláusulas:

  1. A cláusula onde é aplicada a linhas individuais em uma tabela.
  2. Por outro lado, a cláusula de ter é aplicada a um grupo de linhas que atendem à condição especificada. Você também pode usar a cláusula de ter em uma função agregada.

Onde exemplo de cláusula

Considere a tabela de funcionários que contêm dados de amostra, conforme fornecido nas declarações abaixo:

Criar funcionários da tabela (
Id Id Serial Primary Key,
Full_name Varchar (255),
Email Varchar (255),
Departamento Varchar (100),
start_date data,
BOOL ativo,
Categoria Varchar (50)
);
Insira nos funcionários (Full_Name, email, departamento, start_date, ativo, categoria)
Valores
('Meghan Edwards', '[email protected] ',' Development de jogo ',' 2016-06-22 ', verdadeiro,' dev-g1 '),
('Sam Davis', '[email protected] ',' Development de jogo ',' 2014-01-04 ', false,' dev-g1 '),
('Taylor Miller', '[email protected] ',' Development Game ',' 2019-10-06 ', True,' Dev-G1 '),
('Wilson Smitty', '[email protected] ',' Database Developer ',' 2016-12-23 ', true,' dev-db1 '),
('Barbara Moore', '[email protected] ',' Desenvolvedor de banco de dados ',' 2015-12-23 ', true,' dev-db1 '),
('Raj Chan', '[email protected] ',' Database Developer ',' 2017-12-23 ', false,' dev-db1 '),
('Susan Brown', '[email protected] ',' DevOps Engineer ',' 2011-12-23 ', True,' Dev-OPS1 '),
('Marial Anderson', '[email protected] ',' DevOps Engineer ',' 2015-12-23 ', True,' Dev-OPS1 '),
('Nancy Thomas', '[email protected] ',' DevOps Engineer ',' 2014-12-23 ', false,' Dev-OPS1 ');

Podemos usar o Selecionar com a cláusula onde buscar as linhas onde a categoria é igual a 'Dev-OPS-1'.

Um exemplo de expressão é como mostrado:

Selecione *
De funcionários
Onde categoria = 'dev-OPS1';

A consulta acima é aplicada em linha por linha e retorna o conjunto de resultados como mostrado:

Tendo um exemplo de cláusula

Como afirmado, a cláusula de ter é aplicada no agregado. Por exemplo, considere a tabela com dados de amostra, como mostrado na consulta abaixo:

Crie tabela youtube_stats (
Id Serial,
canal_id varchar (50),
video_id Varchar (50),
Views_Count int
);
Inserir no youtube_stats (canal_id, video_id, views_count)
Valores
('chan1', 'vid1', 100000),
('chan1', 'vid2', 500000),
('chan2', 'vid1', 400000),
('chan2', 'vid2', 1000000),
('chan3', 'vid1', 800000),
('chan4', 'vid1', 262529);

Podemos usar os grupos agregados da cláusula como mostrado:

Selecione ID,
Canal_id,
Video_id,
SUM (Views_Count) como Total_Views
Do youtube_stats
Grupo por canal_id
Tendo total_views> = 100000

A consulta acima deve retornar apenas os elementos onde a soma é maior ou igual à condição acima.