Pular para o conteúdo principal

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

Banco de DadosConsultas e Comandos em SQL
Código
qa699120
Banca
Quadrix
Órgão
CORE SP
Ano
2025
Cargo
Ana TI ( )

Texto para a questão

 

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

 

tabela Aluno

aluno_id

INT (PK)

nome_aluno

CHAR (200)

data_nascimento

DATE

curso_id

INT (FK)

 

tabela Curso

curso_id

INT (PK)

nome_aluno

CHAR (200)

departamento_id

INT (FK)

 

tabela Departamento

departamento_id

INT (PK)

nome_departamento

CHAR (200)

 

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. ASELECT nome_aluno FROM Aluno WHERE nome_aluno IN (‘Marketing’, ‘Administração’) AND EXTRACT(YEAR FROM data_nascimento) = 2006 ORDER BY nome_aluno;
  2. BSELECT a.nome_aluno FROM Aluno a JOIN Curso c ON a.curso_id = c.curso_id WHERE c.nome_curso IN (‘Marketing’, ‘Administração’) AND EXTRACT(YEAR FROM a.data_nascimento) = 2026 ORDER BY a.nome_aluno;
  3. CSELECT a.nome_aluno FROM Aluno a JOIN Curso c ON a.curso_id = c.curso_id WHERE c.nome_curso IN (‘Marketing’, ‘Administração’) AND EXTRACT(YEAR FROM a.data_nascimento) = 2006 ORDER BY a.nome_aluno ASC;
  4. DSELECT nome_aluno FROM Aluno WHERE curso_id IN (‘Marketing’, ‘Administração’) AND YEAR(data_nascimento) = 2006 ORDER BY nome_aluno;
  5. ESELECT a.nome_aluno, c.nome_curso FROM Aluno a JOIN Curso c ON a.curso_id = c.curso_id WHERE EXTRACT(YEAR FROM a.data_nascimento) = 2006 ORDER BY c.nome_curso DESC;
Revelar gabarito e comentário

GabaritoC — SELECT a.nome_aluno FROM Aluno a JOIN Curso c ON a.curso_id = c.curso_id WHERE c.nome_curso IN (‘Marketing’, ‘Administração’) AND EXTRACT(YEAR FROM a.data_nascimento) = 2006 ORDER BY a.nome_aluno ASC;

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: JOIN, filtros e ordenação

Gabarito: letra C. A consulta correta deve unir as tabelas Aluno e Curso pela chave estrangeira curso_id, filtrar os cursos de 'Marketing' e 'Administração' pelo nome do curso (coluna nome_curso da tabela Curso), selecionar os alunos que completam 20 anos em 2026 (nascidos em 2006) e ordenar o resultado em ordem alfabética pelo nome do aluno. A alternativa C atende a todos esses requisitos.

Para resolver esta questão, é essencial entender o modelo relacional apresentado. A tabela Aluno possui uma chave estrangeira curso_id que referencia a tabela Curso. Isso significa que, para saber o nome do curso de um aluno, é necessário fazer uma junção (JOIN) entre essas duas tabelas. A tabela Curso, por sua vez, possui departamento_id como chave estrangeira para Departamento, mas essa relação não é necessária para a consulta pedida.

O enunciado pede os estudantes dos cursos de 'marketing' e 'administração'. Como o nome do curso está na tabela Curso, e não na tabela Aluno, a consulta precisa unir as duas tabelas. A condição de junção é a.curso_id = c.curso_id. O filtro deve ser feito sobre c.nome_curso, não sobre a.nome_aluno (que é o nome do estudante) nem sobre curso_id (que é um número, não um nome).

Sobre a data de nascimento: quem completa 20 anos em 2026 nasceu em 2006 (2026 - 20 = 2006). Portanto, o filtro correto é EXTRACT(YEAR FROM a.data_nascimento) = 2006. A função EXTRACT é padrão SQL e funciona em diversos SGBDs, como PostgreSQL e Oracle. A alternativa B usa = 2026, o que está errado, pois selecionaria alunos nascidos em 2026 (que teriam 0 anos em 2026).

A ordenação deve ser alfabética pelo nome do aluno, ou seja, ORDER BY a.nome_aluno ASC. O ASC é opcional, pois é o padrão, mas sua presença não invalida a consulta. A alternativa C inclui ASC explicitamente, o que é correto.

Agora, vamos analisar cada alternativa em detalhes.

Alternativa A — ❌ Incorreta

O erro está no filtro WHERE nome_aluno IN ('Marketing', 'Administração'). A coluna nome_aluno na tabela Aluno contém o nome do estudante, não o nome do curso. O nome do curso está na tabela Curso, na coluna nome_curso. Portanto, essa consulta filtraria alunos cujo nome fosse 'Marketing' ou 'Administração', o que não atende ao pedido. Além disso, não há JOIN com a tabela Curso, então não é possível acessar o nome do curso.

Alternativa B — ❌ Incorreta

O erro está no filtro EXTRACT(YEAR FROM a.data_nascimento) = 2026. Quem completa 20 anos em 2026 nasceu em 2006, não em 2026. A alternativa B selecionaria alunos nascidos em 2026, que teriam 0 anos em 2026, o que não faz sentido para o projeto. O restante da consulta (JOIN, filtro por nome do curso e ordenação) está correto, mas o ano está errado.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta alternativa está correta porque:

  • Faz o JOIN entre Aluno e Curso pela chave estrangeira curso_id.

  • Filtra os cursos de 'Marketing' e 'Administração' pela coluna nome_curso da tabela Curso.

  • Filtra os alunos nascidos em 2006, que completam 20 anos em 2026.

  • Ordena o resultado em ordem alfabética pelo nome do aluno, com ASC explícito (que é o padrão, mas não invalida).

Alternativa D — ❌ Incorreta

O erro está no filtro WHERE curso_id IN ('Marketing', 'Administração'). A coluna curso_id é uma chave estrangeira do tipo INT, que armazena números, não nomes de cursos. Comparar um campo inteiro com strings 'Marketing' e 'Administração' não retornaria nenhum resultado, pois os tipos são incompatíveis. Além disso, não há JOIN com a tabela Curso, então não é possível acessar o nome do curso. A função YEAR também não é padrão SQL (é específica do MySQL), enquanto EXTRACT é mais portável.

Alternativa E — ❌ Incorreta

O erro está na ausência do filtro pelos cursos de 'Marketing' e 'Administração'. A consulta seleciona todos os alunos nascidos em 2006, independentemente do curso, e ordena pelo nome do curso em ordem decrescente (DESC), não pelo nome do aluno em ordem alfabética. O enunciado pede especificamente os estudantes dos cursos de marketing e administração, então esse filtro é obrigatório. Além disso, a ordenação deveria ser pelo nome do aluno, não pelo nome do curso.

NÃO CAIA NESSA!

A banca explora duas confusões clássicas: (1) trocar o ano de nascimento (2006) pelo ano de referência (2026) — quem completa 20 anos em 2026 nasceu em 2006; (2) filtrar pelo nome do curso na tabela errada (nome_aluno em vez de nome_curso) ou usar curso_id (que é numérico) com strings. Fique atento a essas inversões.

PEGA ESSA DICA!

Para questões de SQL com JOIN, siga este roteiro: 1) identifique as tabelas envolvidas e a chave de junção; 2) verifique onde estão os campos de filtro (nome do curso está na tabela Curso, não em Aluno); 3) calcule o ano de nascimento corretamente (ano de referência - idade); 4) confira a ordenação pedida. Esse passo a passo resolve a maioria das questões.

Gabarito: letra C

Link permanente: /questoes/qa699120