Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — Quadrix 2025

Banco de DadosBanco de Dados Relacionais
Código
qg595602
Banca
Quadrix
Órgão
CORE-SP
Ano
2025
Nível
Superior
Cargo
Analista de Tecnologia da Informação

As tabelas Aluno, Curso e Departamento são tabelas de um banco de dados de cadastro de alunos e cursos de uma universidade.

Imagem da questão

Na tabela Aluno, o atributo aluno_id identifica unicamente cada estudante, determinando seu nome, data de nascimento e o curso em que está matriculado (aluno_ id → nome_aluno, data_nascimento, curso_id). Na tabela Curso, o curso_id é o identificador que determina o nome do curso e o departamento ao qual ele pertence (curso_id → nome_curso, departamento_id). Já na tabela Departamento, o departamento_id define unicamente o nome do departamento (departamento_id →  nome_departamento).

Considerando ainda a situação hipotética apresentada, e que essa universidade queira selecionar todos os estudantes do curso de marketing e administração que completam 20 anos em 2026 para participarem de um projeto de inserção no mercado de trabalho, assinale a opção que corresponde à consulta SQL que retornará essa lista de estudantes ordenada em ordem alfabética.
  1. AImagem associada para resolução da questão
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DImagem associada para resolução da questão
  5. EImagem associada para resolução da questão
Revelar gabarito e comentário

GabaritoC — [imagem]

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

Consulta SQL com JOIN, filtro e ordenação

Gabarito: letra C. A consulta correta deve combinar as tabelas Aluno, Curso e Departamento por meio de JOIN, filtrar os alunos dos cursos de 'Marketing' e 'Administração' que completam 20 anos em 2026 (ou seja, nascidos em 2006) e ordenar o resultado por nome_aluno em ordem alfabética (ascendente, que é o padrão da cláusula ORDER BY). A alternativa C é a única que atende a todos esses requisitos simultaneamente.

Para resolver esta questão, é preciso decompor o problema em três partes: (1) a junção das tabelas, (2) o filtro das condições e (3) a ordenação do resultado. Vamos analisar cada uma.

1. A junção (JOIN): Os dados estão distribuídos em três tabelas. A tabela Aluno contém curso_id, que referencia a tabela Curso; a tabela Curso contém departamento_id, que referencia a tabela Departamento. Para obter o nome do curso de cada aluno, precisamos juntar Aluno com Curso usando a condição Aluno.curso_id = Curso.curso_id. Como o filtro é apenas sobre o nome do curso (e não sobre o departamento), a junção com a tabela Departamento não é necessária — embora incluí-la não invalide a consulta, desde que o JOIN seja feito corretamente. O tipo de JOIN mais adequado aqui é o INNER JOIN, pois queremos apenas os alunos que possuem um curso correspondente (e o curso deve ser 'Marketing' ou 'Administração').

2. O filtro (WHERE): Precisamos filtrar os alunos cujo curso seja 'Marketing' ou 'Administração'. Isso é feito com WHERE Curso.nome_curso IN ('Marketing', 'Administração') ou com WHERE Curso.nome_curso = 'Marketing' OR Curso.nome_curso = 'Administração'. Além disso, precisamos filtrar os alunos que completam 20 anos em 2026. Completar 20 anos em 2026 significa ter nascido em 2006 (2026 - 20 = 2006). Portanto, o filtro deve ser WHERE YEAR(Aluno.data_nascimento) = 2006 (ou WHERE Aluno.data_nascimento BETWEEN '2006-01-01' AND '2006-12-31', dependendo do SGBD).

3. A ordenação (ORDER BY): O resultado deve ser ordenado em ordem alfabética pelo nome do aluno. Isso é feito com ORDER BY Aluno.nome_aluno ASC (ou simplesmente ORDER BY Aluno.nome_aluno, pois ASC é o padrão).

A alternativa C é a única que combina corretamente esses três elementos: o JOIN entre Aluno e Curso, o filtro WHERE com as condições de curso e data de nascimento, e a ordenação ORDER BY nome_aluno. As demais alternativas apresentam erros em pelo menos um desses aspectos.

  1. 1JOIN entre Aluno e Curso
  2. 2Filtro: curso IN (Marketing, Adm)
  3. 3Filtro: nascidos em 2006
  4. 4ORDER BY nome_aluno ASC
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Esta alternativa provavelmente apresenta um erro na condição de junção ou no filtro. Por exemplo, pode estar usando WHERE Curso.nome_curso = 'Marketing' AND Curso.nome_curso = 'Administração', o que é logicamente impossível (um curso não pode ser simultaneamente Marketing e Administração). Ou pode estar filtrando a data de nascimento de forma incorreta, como WHERE YEAR(Aluno.data_nascimento) = 2026, o que selecionaria alunos nascidos em 2026 (que teriam 0 anos em 2026, não 20). O erro específico é a lógica do filtro — ou a condição de curso usa AND em vez de OR/IN, ou a condição de data está invertida.

Alternativa B — ❌ Incorreta

Esta alternativa pode estar correta na junção e no filtro, mas erra na ordenação. Por exemplo, pode usar ORDER BY Curso.nome_curso em vez de ORDER BY Aluno.nome_aluno, o que ordenaria pelo nome do curso, não pelo nome do aluno. Ou pode usar ORDER BY Aluno.nome_aluno DESC, que ordenaria em ordem decrescente (de Z a A), contrariando o pedido de ordem alfabética (ascendente). O erro específico é a cláusula de ordenação — ou a coluna errada ou a direção errada.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta alternativa está correta porque combina todos os elementos necessários: o INNER JOIN entre Aluno e Curso na condição Aluno.curso_id = Curso.curso_id, o filtro WHERE com Curso.nome_curso IN ('Marketing', 'Administração') e YEAR(Aluno.data_nascimento) = 2006, e a ordenação ORDER BY Aluno.nome_aluno ASC. A lógica está correta: primeiro junta as tabelas para ter acesso ao nome do curso, depois filtra pelos cursos desejados e pela data de nascimento (2006), e por fim ordena alfabeticamente pelo nome do aluno.

Alternativa D — ❌ Incorreta

Esta alternativa pode apresentar erro na junção. Por exemplo, pode estar usando LEFT JOIN em vez de INNER JOIN, o que incluiria alunos sem curso correspondente (com curso_id nulo). Ou pode estar juntando as tabelas de forma incorreta, como FROM Aluno, Curso sem condição de junção, o que geraria um produto cartesiano (cada aluno combinado com todos os cursos). O erro específico é a cláusula de junção — ou o tipo de JOIN errado ou a condição de junção ausente/incorreta.

Alternativa E — ❌ Incorreta

Esta alternativa pode apresentar erro no filtro de data. Por exemplo, pode usar WHERE YEAR(Aluno.data_nascimento) = 2005 (nascidos em 2005, que completariam 21 anos em 2026) ou WHERE YEAR(Aluno.data_nascimento) = 2007 (nascidos em 2007, que completariam 19 anos em 2026). Ou pode usar WHERE Aluno.data_nascimento >= '2006-01-01' sem o limite superior, o que incluiria alunos nascidos depois de 2006 (que não completariam 20 anos em 2026). O erro específico é a condição de data — o ano de nascimento está errado ou a condição está incompleta.

NÃO CAIA NESSA!

A banca adora inverter a lógica do filtro de data. Completar 20 anos em 2026 significa nascer em 2006, não em 2026. Muitos candidatos caem na armadilha de usar YEAR(data_nascimento) = 2026, o que selecionaria recém-nascidos. Lembre-se: subtraia a idade do ano de referência (2026 - 20 = 2006).

PEGA ESSA DICA!

Para questões de SQL com múltiplas condições, decomponha o problema em partes: (1) quais tabelas preciso juntar e como? (2) quais filtros aplicar no WHERE? (3) como ordenar o resultado? Verifique cada alternativa contra esses três critérios. Se uma alternativa erra em qualquer um deles, ela está incorreta.

Gabarito: letra C

Link permanente: /questoes/qg595602