Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024

Banco de DadosConsultas 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

110
240
320
410
 

Tabela T2

 

E

QP
1102
2403
3208
410NULL
 

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:

  1. A4 linhas e 5 colunas;
  2. B6 linhas e 4 colunas;
  3. C6 linhas e 5 colunas;
  4. D16 linhas e 4 colunas;
  5. 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 JOIN nunca 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.

Gabarito: letra C

Link permanente: /questoes/fg165197