Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2023
Banco de Dados›Consultas e Comandos em SQL
Código
qa537504
Banca
FUNDATEC
Órgão
BRDE
Ano
2023
Cargo
Ana Sist ( )
Uma escola que oferece aulas de reforço possui um cadastro de professores especializados em alguma matéria e de alunos que precisam de reforço escolar em matérias específicas. As tabelas estão desenhadas abaixo.
Professores
codp
nomep
materia
p1
Joao
matematica
p2
Pedro
ingles
p3
Paula
ingles
p4
Maria
portugues
p5
Rosa
portugues
Alunos
coda
nomea
materia
a1
chico
matematica
a2
martha
matematica
a3
lonise
ingles
a4
pedro
ingles
A5
augusto
historia
Solicitaram ao DBA que casasse as necessidades dos alunos com a especialidade dos professores, mas não deram muitos detalhes. O DBA preparou, então, três possibilidades de combinação, representadas pelas consultas SQL (padrão SQL99 ou superior) abaixo:
I. select nomea, nomep from professores natural join alunos
II. select nomea, nomep from professores right join alunos on professores.materia = alunos.materia
III. select nomea, nomep from professores full join alunos using (materia)
Selecione a alternativa que representa, nesta ordem, o número de tuplas resultantes das consultas I, II e III.
A7 – 7 – 9.
B6 – 8 – 8.
C6 – 7 – 9.
D7 – 8 – 9.
E6 – 7 – 8.
Revelar gabarito e comentário▾
GabaritoC — 6 – 7 – 9.
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”.
Junções SQL: NATURAL JOIN, RIGHT JOIN e FULL JOIN
Gabarito: letra C — as consultas I, II e III retornam, respectivamente, 6, 7 e 9 tuplas. A consulta I usa NATURAL JOIN (junção interna pelas colunas de mesmo nome), a II usa RIGHT JOIN (preserva todos os alunos, mesmo sem professor correspondente) e a III usa FULL JOIN (preserva todos os registros de ambas as tabelas).
O que são junções em SQL
Junções (JOIN) combinam linhas de duas ou mais tabelas com base em uma condição relacionada. O padrão SQL99 define vários tipos, e a diferença entre eles está em quais linhas são preservadas quando não há correspondência na outra tabela. Essa é a chave para resolver a questão.
Vamos entender cada tipo usado:
NATURAL JOIN: junção interna que automaticamente iguala as colunas com o mesmo nome nas duas tabelas. No caso, professores e alunos têm a coluna materia em comum. O resultado contém apenas os pares onde a matéria do professor é igual à matéria do aluno. Alunos sem professor da mesma matéria (como Augusto, de história) e professores sem alunos da mesma matéria (como Maria e Rosa, de português) são excluídos.
RIGHT JOIN (ou RIGHT OUTER JOIN): preserva todas as linhas da tabela à direita (no caso, alunos), mesmo que não haja correspondência na tabela à esquerda (professores). Quando não há professor para a matéria do aluno, as colunas do professor ficam com NULL. Professores sem alunos correspondentes são descartados.
FULL JOIN (ou FULL OUTER JOIN): preserva todas as linhas de ambas as tabelas. Quando não há correspondência, as colunas da tabela sem par ficam com NULL. É a junção mais inclusiva.
Aplicando aos dados
Vamos contar as tuplas de cada consulta:
Consulta I — NATURAL JOIN
A junção é feita pela coluna materia. Vamos cruzar:
Professor
Matéria
Aluno
Matéria
João
matematica
chico
matematica
João
matematica
martha
matematica
Pedro
ingles
lonise
ingles
Pedro
ingles
pedro
ingles
Paula
ingles
lonise
ingles
Paula
ingles
pedro
ingles
Professores de português (Maria, Rosa) não têm alunos de português; o aluno Augusto (história) não tem professor. Total: 6 tuplas.
Consulta II — RIGHT JOIN
Preserva todos os alunos. Para cada aluno, busca o professor da mesma matéria:
Aluno
Matéria
Professor
chico
matematica
João
martha
matematica
João
lonise
ingles
Pedro
lonise
ingles
Paula
pedro
ingles
Pedro
pedro
ingles
Paula
augusto
historia
NULL
Augusto não tem professor correspondente, mas é preservado com NULL. Total: 7 tuplas.
Consulta III — FULL JOIN
Preserva todos os alunos e todos os professores. Além das 6 combinações da junção interna, adiciona:
Aluno Augusto (história) sem professor → 1 linha
Professores Maria e Rosa (português) sem alunos → 2 linhas
Total: 6 + 1 + 2 = 9 tuplas.
Comparando os resultados
Consulta
Tipo de Junção
Tuplas
I
NATURAL JOIN (interna)
6
II
RIGHT JOIN (externa à direita)
7
III
FULL JOIN (externa completa)
9
A pegadinha está em contar corretamente as linhas sem correspondência. Na RIGHT JOIN, apenas o aluno sem professor entra; na FULL JOIN, entram também os professores sem alunos.
Alternativa A — ❌ Incorreta
Afirma 7 – 7 – 9. O erro está na consulta I: o NATURAL JOIN é uma junção interna, que exclui linhas sem correspondência. Como há 2 professores de português sem alunos e 1 aluno de história sem professor, o resultado é 6, não 7. O valor 7 corresponderia a um LEFT JOIN ou RIGHT JOIN, não a um NATURAL JOIN.
Alternativa B — ❌ Incorreta
Afirma 6 – 8 – 8. O erro está na consulta II: o RIGHT JOIN preserva todos os alunos (5), mas apenas 1 deles (Augusto) não tem professor. Os outros 4 alunos geram combinações: chico (1 professor), martha (1), lonise (2), pedro (2) = 6 combinações + 1 sem par = 7, não 8. O valor 8 não corresponde a nenhuma contagem lógica dos dados.
Alternativa C — ✅ Correta ⟵ GABARITO
Apresenta a sequência correta: 6 – 7 – 9. A consulta I (NATURAL JOIN) retorna 6 tuplas (apenas combinações com matéria igual). A consulta II (RIGHT JOIN) retorna 7 tuplas (6 combinações + 1 aluno sem professor). A consulta III (FULL JOIN) retorna 9 tuplas (6 combinações + 1 aluno sem professor + 2 professores sem alunos).
Alternativa D — ❌ Incorreta
Afirma 7 – 8 – 9. O erro está nas consultas I e II. A consulta I não pode retornar 7, pois é uma junção interna que exclui linhas sem par. A consulta II não retorna 8, pois apenas 1 aluno fica sem professor, totalizando 7. O valor 9 está correto apenas para a consulta III.
Alternativa E — ❌ Incorreta
Afirma 6 – 7 – 8. O erro está na consulta III: o FULL JOIN preserva todas as linhas de ambas as tabelas. Além das 6 combinações, entram 1 aluno sem professor e 2 professores sem alunos, totalizando 9, não 8. O valor 8 não corresponde a nenhuma contagem dos dados.
PEGA ESSA DICA!
Para resolver questões de junção, identifique primeiro o tipo de JOIN e depois conte as combinações. Na dúvida, desenhe as tabelas e cruze os dados manualmente. Lembre-se: NATURAL JOIN e INNER JOIN excluem linhas sem par; LEFT/RIGHT JOIN preservam as linhas da tabela indicada; FULL JOIN preserva todas.