Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2023

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

  1. A7 – 7 – 9.
  2. B6 – 8 – 8.
  3. C6 – 7 – 9.
  4. D7 – 8 – 9.
  5. 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.

Gabarito: letra C

Link permanente: /questoes/qa537504