Questão FC295889
Considere a tabela Familia, apresentada abaixo, que possui as colunas Pai e Filho e uma instância exemplo que permite ilustrar as informações contidas nessa tabela. Pai Filho Andre
Linguagem SQL
CESGRANRIO · 2023
Considere a tabela Familia, apresentada abaixo, que possui as colunas Pai e Filho e uma instância exemplo que permite ilustrar as informações contidas nessa tabela.
| Pai |
Filho |
| Andre | Carlos |
| Andre |
Claudio |
| Bruno |
Diego |
| Bruno |
Daniel |
| Carlos |
Eriko |
| Carlos |
Fabio |
| Daniel |
Gustavo |
| Diego |
Heleno |
| Eriko |
Isidoro |
| Fabio |
João |
Uma consulta SQL feita para exibir os nomes dos netos de Carlos retorna os nomes Isidoro e João. A expressão, em linguagem SQL, dessa consulta é
- SELECT f2.filho
FROM Familia f1 INNER JOIN Familia f2 ON f1.filho = f2.pai
WHERE f1.pai = 'Carlos';
- SELECT f1.pai
FROM Familia f1 INNER JOIN Familia f2 ON f1.pai = f2.filho
WHERE f1.filho = 'Carlos';
- SELECT f1.pai
FROM Familia f1 INNER JOIN Familia f2 ON f1.filho = f2.pai
WHERE f1.pai = 'Carlos';
- SELECT
f2.filho FROM Familia f1 INNER JOIN Familia f2 ON f1.pai = f2.pai
WHERE f1.pai = 'Carlos';
- SELECT f2.filho
FROM Familia f1 INNER JOIN Familia f2 ON f1.filho = f2.filho
WHERE f1.pai = 'Carlos';
Mostrar resposta e comentário
Gabarito
A
Comentário do professor
A consulta usa duas instâncias da mesma tabela com aliases f1 e f2 para relacionar gerações. O INNER JOIN com a cláusula ON f1.filho = f2.pai faz corresponder cada filho de uma linha (em f1) ao papel de pai em outra linha (em f2), ou seja, liga a segunda geração à terceira.
A condição WHERE f1.pai = 'Carlos' filtra apenas as linhas em que a pessoa da primeira geração é o pai Carlos, assim selecionando seus filhos (segunda geração) como ponto de partida.
Por fim, o SELECT f2.filho retorna o nome dos filhos das pessoas encontradas em f2, isto é, os netos de Carlos. Na instância apresentada, o resultado será Isidoro e João.
Conteúdo do catálogo FC Concursos · Atualizado em