Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — INSTITUTO AOCP 2025

Banco de DadosConsultas e Comandos em SQL
Código
qa699130
Banca
INSTITUTO AOCP
Órgão
UFABC
Ano
2025
Cargo
Téc ( )
Um Técnico de Tecnologia da Informação da UFABC está desenvolvendo um sistema de gestão acadêmica que integra informações sobre professores, disciplinas, cursos e dependentes. Para gerar relatórios estratégicos, ele precisa consultar os nomes dos professores, sem duplicidade, que ministram disciplinas do 5º período do curso de Engenharia de Software, que possuem dependentes cadastrados e têm grau de doutor. O banco de dados possui as seguintes tabelas relevantes para a consulta:   \bullet Professores (id_professor, nome, grau, …) \bullet Disciplinas (id_disciplina, nome, periodo, id_curso, …) \bullet Cursos (id_curso, nome_curso, …) \bullet Ministra (id_professor, id_disciplina) – relação entre professores e disciplinas \bullet Dependentes (id_dependente, id_professor, …)   Considerando essas tabelas, qual consulta SQL atende a todos os critérios mencionados?
  1. ASELECT p.nome FROM Professores p JOIN Ministra m ON p.id_professor = m.id_professor JOIN Disciplinas d ON m.id_disciplina = d.id_disciplina WHERE d.periodo = 5;
  2. BSELECT DISTINCT p.nome FROM Professores p JOIN Ministra m ON p.id_professor = m.id_professor JOIN Disciplinas d ON m.id_disciplina = d.id_disciplina JOIN Cursos c ON d.id_curso = c.id_curso WHERE d.periodo = 5 AND c.nome_curso = 'Engenharia de Software';
  3. CSELECT DISTINCT p.nome FROM Professores p JOIN Ministra m ON p.id_professor = m.id_professor JOIN Disciplinas d ON m.id_disciplina = d.id_disciplina JOIN Cursos c ON d.id_curso = c.id_curso JOIN Dependentes dep ON p.id_professor = dep.id_professor WHERE d.periodo = 5 AND c.nome_curso = 'Engenharia de Software' AND p.grau = 'Doutor';
  4. DSELECT p.nome FROM Professores p JOIN Dependentes dep ON p.id_professor = dep.id_professor WHERE p.grau = 'Doutor';
  5. ESELECT DISTINCT p.nome FROM Professores p JOIN Ministra m ON p.id_professor = m.id_professor JOIN Disciplinas d ON m.id_disciplina = d.id_disciplina JOIN Cursos c ON d.id_curso = c.id_curso WHERE p.grau = 'Doutor';
Revelar gabarito e comentário

GabaritoC — SELECT DISTINCT p.nome FROM Professores p JOIN Ministra m ON p.id_professor = m.id_professor JOIN Disciplinas d ON m.id_disciplina = d.id_disciplina JOIN Cursos c ON d.id_curso = c.id_curso JOIN Dependentes dep ON p.id_professor = dep.id_professor WHERE d.periodo = 5 AND c.nome_curso = 'Engenharia de Software' AND p.grau = 'Doutor';

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”.

Consultas SQL com múltiplas junções e filtros

Gabarito: letra C. A alternativa C é a única que atende a todos os critérios do enunciado: nomes de professores sem duplicidade (DISTINCT), que ministram disciplinas do 5º período do curso de Engenharia de Software, que possuem dependentes cadastrados e têm grau de doutor. Para isso, ela realiza as junções necessárias entre as tabelas Professores, Ministra, Disciplinas, Cursos e Dependentes, e aplica os filtros corretos na cláusula WHERE.

O problema exige a combinação de informações de cinco tabelas diferentes. Para relacionar um professor a uma disciplina, é preciso usar a tabela associativa Ministra, que liga id_professor a id_disciplina. Para saber o curso da disciplina, é necessário juntar Disciplinas com Cursos através de id_curso. E para verificar se o professor tem dependentes, é preciso juntar Professores com Dependentes através de id_professor. A consulta correta deve fazer todas essas junções e filtrar por d.periodo = 5, c.nome_curso = 'Engenharia de Software' e p.grau = 'Doutor'. O DISTINCT garante que cada professor apareça apenas uma vez, mesmo que ministre várias disciplinas do 5º período ou tenha mais de um dependente.

Vamos analisar cada alternativa para entender por que apenas a C está completa. As alternativas A, B, D e E omitem pelo menos um dos critérios essenciais, seja a junção com a tabela Dependentes, o filtro do curso, o filtro do grau ou o DISTINCT para eliminar duplicidades. A pegadinha da banca está em apresentar consultas que parecem corretas, mas que deixam de fora um requisito específico do enunciado.

A chave para resolver essa questão é mapear cada critério do enunciado para uma cláusula SQL. O critério "sem duplicidade" exige DISTINCT. O critério "ministram disciplinas do 5º período" exige a junção com Ministra e Disciplinas e o filtro periodo = 5. O critério "do curso de Engenharia de Software" exige a junção com Cursos e o filtro nome_curso = 'Engenharia de Software'. O critério "possuem dependentes cadastrados" exige a junção com Dependentes. E o critério "têm grau de doutor" exige o filtro grau = 'Doutor'. A alternativa que contém todos esses elementos é a correta.

Alternativa A — ❌ Incorreta

Esta consulta faz as junções entre Professores, Ministra e Disciplinas, e filtra apenas pelo período (d.periodo = 5). Ela não junta com a tabela Cursos para filtrar o curso de Engenharia de Software, não junta com Dependentes para verificar se o professor tem dependentes, e não filtra pelo grau de doutor. Além disso, não usa DISTINCT, o que pode gerar nomes duplicados. Portanto, está incompleta e incorreta.

Alternativa B — ❌ Incorreta

Esta consulta adiciona a junção com Cursos e o filtro c.nome_curso = 'Engenharia de Software', e usa DISTINCT. Porém, ela não junta com a tabela Dependentes e não filtra pelo grau de doutor (p.grau = 'Doutor'). Assim, retornaria professores de Engenharia de Software do 5º período, mas sem verificar se têm dependentes ou se são doutores. Está incompleta.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta é a consulta completa. Ela faz todas as junções necessárias: Professores com Ministra, Ministra com Disciplinas, Disciplinas com Cursos, e Professores com Dependentes. Aplica os três filtros exigidos: d.periodo = 5, c.nome_curso = 'Engenharia de Software' e p.grau = 'Doutor'. E usa DISTINCT para garantir que cada professor apareça apenas uma vez, mesmo que ministre várias disciplinas do 5º período ou tenha mais de um dependente. Atende a todos os critérios do enunciado.

Alternativa D — ❌ Incorreta

Esta consulta junta apenas Professores com Dependentes e filtra pelo grau de doutor. Ela não faz nenhuma junção com Ministra, Disciplinas ou Cursos, portanto não verifica se o professor ministra disciplinas do 5º período do curso de Engenharia de Software. Também não usa DISTINCT. Está totalmente incompleta.

Alternativa E — ❌ Incorreta

Esta consulta faz as junções com Ministra, Disciplinas e Cursos, filtra pelo período, curso e grau de doutor, e usa DISTINCT. Porém, ela não junta com a tabela Dependentes, portanto não verifica se o professor possui dependentes cadastrados. Está incompleta, faltando um dos critérios essenciais.

A regra de ouro para questões de SQL com múltiplos critérios é: cada critério do enunciado deve corresponder a uma junção ou filtro na consulta. Se algum critério não estiver representado, a consulta está errada. Nesta questão, a alternativa C é a única que representa todos os critérios.

Gabarito: letra C

Link permanente: /questoes/qa699130