Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024
Banco de Dados›Consultas e Comandos em SQL
Código
fg165197
Banca
FGV
Órgão
CGE PB
Ano
2024
Cargo
ACP ( )
Tabelas Relacionais T1 e T2
Considere as tabelas relacionais T1 e T2, de acordo com as colunas e as instâncias abaixo descritas. Na execução dos comandos SQL, assuma que o mecanismo do banco de dados considera valores NULL como valores desconhecidos (unknown).
Tabela T1
P
N
1
10
2
40
3
20
4
10
Tabela T2
E
Q
P
1
10
2
2
40
3
3
20
8
4
10
NULL
Considerando as tabelas T1 e T2, anteriormente apresentadas, analise o comando SQL a seguir.
select * from T1 full outer join T2 on T1.P=T2.P
Além da linha de títulos, a execução desse comando produz um resultado com:
A4 linhas e 5 colunas;
B6 linhas e 4 colunas;
C6 linhas e 5 colunas;
D16 linhas e 4 colunas;
E16 linhas e 5 colunas.
Revelar gabarito e comentário▾
GabaritoC — 6 linhas e 5 colunas;
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
FULL OUTER JOIN: contagem de linhas e colunas
Gabarito: letra C. O FULL OUTER JOIN preserva todas as linhas de ambas as tabelas, preenchendo com NULL os lados sem correspondência. Como T1 tem 4 linhas e T2 tem 4 linhas, e há 2 correspondências (P=2 e P=3), o resultado terá 6 linhas (4 de T1 + 2 de T2 sem par) e 5 colunas (2 de T1 + 3 de T2). A alternativa C está correta.
O FULL OUTER JOIN é uma das junções externas do SQL. Ele combina o comportamento do LEFT JOIN e do RIGHT JOIN: retorna todas as linhas da tabela à esquerda e todas da tabela à direita, unindo as que satisfazem a condição ON e preenchendo com NULL os campos da tabela que não tem correspondência. É a junção que nunca descarta linhas — cada linha de cada tabela aparece pelo menos uma vez no resultado.
Para entender a contagem, é preciso separar as linhas de T1 e T2 que têm correspondência das que não têm. Vamos analisar os dados:
T1 (colunas P, N): (1,10), (2,40), (3,20), (4,10)
T2 (colunas E, Q, P): (1,10,2), (2,40,3), (3,20,8), (4,10,NULL)
A condição de junção é T1.P = T2.P. Comparando os valores de P:
T1.P
T2.P
Correspondência?
1
—
Não (não há P=1 em T2)
2
2
Sim (linha 1 de T2)
3
3
Sim (linha 2 de T2)
4
—
Não (não há P=4 em T2)
—
8
Não (não há P=8 em T1)
—
NULL
Não (NULL não casa com nada)
Assim, o FULL OUTER JOIN produz:
As 4 linhas de T1, cada uma com os campos de T2 preenchidos quando há correspondência (P=2 e P=3) e NULL quando não há (P=1 e P=4).
As 2 linhas de T2 que não têm correspondência em T1 (P=8 e P=NULL), com os campos de T1 preenchidos com NULL.
Total: 6 linhas.
Quanto às colunas, o FULL OUTER JOIN concatena todas as colunas das duas tabelas: T1 tem 2 colunas (P, N) e T2 tem 3 colunas (E, Q, P). Como não há colunas com o mesmo nome (P é a chave de junção, mas aparece uma vez de cada lado), o resultado tem 2 + 3 = 5 colunas.
NÃO CAIA NESSA!
A banca explora a confusão entre FULL OUTER JOIN e INNER JOIN. No INNER JOIN, apenas as linhas com correspondência apareceriam (2 linhas: P=2 e P=3). No FULL OUTER JOIN, todas as linhas de ambas as tabelas são preservadas, mesmo sem par. Outra pegadinha é contar as colunas: como T1 e T2 têm a coluna P, o resultado tem 5 colunas, não 4. Fique atento: o FULL OUTER JOINnunca descarta linhas.
Alternativa A — ❌ Incorreta
Afirma que o resultado tem 4 linhas e 5 colunas. O número de colunas está correto (5), mas o de linhas está errado: seriam 4 linhas apenas se fosse um INNER JOIN com as duas correspondências, ou se T1 tivesse 4 linhas e T2 não tivesse linhas sem par. No FULL OUTER JOIN, as linhas sem correspondência de ambas as tabelas são incluídas, totalizando 6.
Alternativa B — ❌ Incorreta
Afirma que o resultado tem 6 linhas e 4 colunas. O número de linhas está correto (6), mas o de colunas está errado: seriam 4 colunas se T1 tivesse 1 coluna e T2 tivesse 3, ou se houvesse colunas com o mesmo nome que fossem coalescidas. Aqui, T1 tem 2 colunas e T2 tem 3, totalizando 5.
Alternativa C — ✅ Correta ⟵ GABARITO
O FULL OUTER JOIN preserva todas as linhas de T1 (4) e todas as de T2 (4), unindo as correspondências (P=2 e P=3) e preenchendo com NULL os lados sem par. Como há 2 correspondências, o total é 4 + 4 − 2 = 6 linhas. As colunas são a concatenação das colunas de T1 (P, N) e T2 (E, Q, P), totalizando 5 colunas. A alternativa C está correta.
Alternativa D — ❌ Incorreta
Afirma que o resultado tem 16 linhas e 4 colunas. 16 linhas seria o resultado de um CROSS JOIN (produto cartesiano: 4 × 4 = 16), não de um FULL OUTER JOIN. Além disso, o número de colunas seria 5, não 4.
Alternativa E — ❌ Incorreta
Afirma que o resultado tem 16 linhas e 5 colunas. O número de colunas está correto (5), mas o de linhas está errado: 16 linhas seria o resultado de um CROSS JOIN, não de um FULL OUTER JOIN. O FULL OUTER JOIN preserva as linhas sem par, mas não multiplica as combinações.