Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2025
Banco de Dados›Consultas 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.
ASELECT nome_aluno FROM Aluno WHERE nome_aluno IN (‘Marketing’, ‘Administração’) AND EXTRACT(YEAR FROM data_nascimento) = 2006 ORDER BY nome_aluno;
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;
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;
DSELECT nome_aluno FROM Aluno WHERE curso_id IN (‘Marketing’, ‘Administração’) AND YEAR(data_nascimento) = 2006 ORDER BY nome_aluno;
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.