Escolar Documentos
Profissional Documentos
Cultura Documentos
A)
group by d.pessoa2
B)
group by d.pessoa2
C)
Página 1 de 7
having count(*) > 1
D)
group by d.pessoa2
E)
group by d.pessoa2
RESOLUÇÃO:
Inicialmente, vamos relembrar que um Banco de Dados ou Base de Dados,
(BD) em breve síntese, pode ser entendido como uma coleção de dados
interrelacionados sobre determinado domínio. Por exemplo, um banco de
dados que armazene dados da execução orçamentária e financeira do
Governo Federal (Siafi). Nesse banco de dados, esperamos encontrar dados
de empenhos, empresas favorecidas, unidade gestoras emissoras dos
empenhos, dentre outros.
Página 2 de 7
Na questão dada pela banca, temos uma tabela com três colunas: pessoa1,
relação e pessoa2. Basicamente, essa tabela está armazenando dados
referentes ao relacionamento entre duas pessoas. NESSA ORDEM, pessoa1
->relação -> pessoa2. A ordem é importante, pois, o tipo de relação muda.
Por exemplo, se a pessoa1 é filha da pessoa2, a pessoa2 seria a mãe/pai da
pessoa1, captaram?
Dito isso, a banca está pedindo o Comando SQL que retorna, como
resultado da consulta, apenas as pessoas que possuem mais de um filho.
Lembre que SQL, acrônimo de Structured Query Language, ou no
português Linguagem de Consulta Estruturada, é a linguagem padrão
para armazenar, manipular e recuperar dados em bancos de dados
relacionais.
Página 3 de 7
• DDL, acrônimo de Data Control Language, Linguagem de Controle
de Dados, é o grupo de comandos do SQL responsável pelo controle
de acesso aos dados, quem pode acessar, qual tipo de permissão
(somente recuperar dados, recuperar, inserir e alterar etc.). Isso é
muito importante quando lidamos com dados sensíveis, sigilosos,
assim queremos restringir o acesso a esses dados apenas aos usuários
autorizados. Exemplos: GRANT, REVOKE;
Assim, quando se pede uma consulta que retorne as pessoas que possuem
mais de um filho, está pedindo a CONTAGEM de linhas (registros) em
que o nome de determinada pessoa consta na coluna pessoa2, com a
relação “filho”. Depois disso, irei filtrar e só retornar o nome dessa
pessoa2, cuja contagem de linhas retornadas for MAIOR QUE UM.
Página 4 de 7
Select pessoa2 from descendencia
where relação = 'filha(o)'
Podemos dar aliases a uma tabela colocando esse apelido após o nome da
tabela “descendencia d” ou com uso da expressão as “descendencia as d”
Página 5 de 7
Select d.pessoa2, count(*) from descendencia d
where d.relação = 'filha(o)'
Group by d.pessoa2
Ou essa mesma consulta usando aliases e ordenando alfabeticamente pelo
nome da pessoa2
Select d.pessoa2 as nome_pessoa, count(*) as quantidade_filhos from
descendencia d
where d.relação = 'filha(o)'
Group by d.pessoa2
Order By d.pessoa2
IMPORTANTE: para contarmos todas as linhas retornadas para um
determinado agrupamento, usamos o count (*)
Mas o que questão me pede não é isso, certo? Ela pede que a consulta
retorne somente as pessoas que possuam mais de um filho
Ou seja, eu preciso aplicar um filtro APÓS O AGRUPAMENTO. Para
isso, usamos a expressão HAVING.
Pessoal, os filtros inseridos na cláusula WHERE são avaliados ANTES da
operação de agrupamento. Já o HAVING é um filtro usado APÓS a
operação de agrupamento (group by) e podemos trabalhar com as funções de
agregação, como o COUNT.
Página 6 de 7
NÃO USAMOS FILTROS COM FUNÇÕES DE AGREGAÇÃO
DENTRO DA CLÁUSULA WHERE, OK?
GABARITO LETRA B
Página 7 de 7