Pular para o conteúdo principal

Questão de Banco de Dados — SQL — CESPE / CEBRASPE 2024

Banco de DadosSQL
Código
ce190751
Banca
CESPE / CEBRASPE
Órgão
TSE
Ano
2024
Nível
Médio
Cargo
Técnico Judiciário – Área: Apoio Especializado – Especialidade: Programação de Sistemas
Em determinada faculdade, para controlar os dados das monitorias prestadas por alunos a seus colegas, foram criadas as tabelas Aluno, Disciplina e Monitoria por meio dos scripts SQL a seguir. Captura_de tela 2024-12-17 090918.png 501×574 A partir dessas informações, julgue o próximo item. O comando SQL a seguir é capaz de listar pelo nome apenas o Aluno apoiado pela Monitoria, seguido pelo número de horas de atendimento, sendo a lista dada em ordem decrescente do número de horas e apresentada com pelo menos um registro na tabela Monitoria.Captura_de tela 2024-12-17 091037.png 457×84
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

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

SQL: junção e agregação em consulta de monitoria

Gabarito: Errado (E). O comando SQL apresentado não é capaz de listar apenas os alunos apoiados pela monitoria com o número de horas em ordem decrescente, pois a consulta provavelmente utiliza uma junção interna (INNER JOIN) que, embora garanta que apenas alunos com registro na tabela Monitoria apareçam, pode não estar ordenando corretamente ou pode estar usando uma função de agregação inadequada. A questão exige que a lista seja ordenada por horas em ordem decrescente e que apresente pelo menos um registro na tabela Monitoria, o que sugere a necessidade de um GROUP BY e ORDER BY corretos, além de uma junção que preserve os registros desejados.

O comando SQL em questão, para listar o nome do aluno e o total de horas de monitoria, deve combinar as tabelas Aluno e Monitoria por meio de uma junção, agrupar por aluno e somar as horas. A ordem decrescente é obtida com ORDER BY SUM(horas) DESC. Se o comando não incluir essas cláusulas ou as incluir de forma incorreta, o resultado não atenderá ao solicitado. A banca explora exatamente a necessidade de entender a sintaxe correta de junção, agregação e ordenação em SQL.

A principal distinção que importa aqui é entre junção interna (INNER JOIN) e junção externa (LEFT/RIGHT JOIN). A junção interna retorna apenas os registros que possuem correspondência nas duas tabelas, o que atende ao requisito de "apenas o Aluno apoiado pela Monitoria". Já a junção externa preservaria alunos sem monitoria, o que não é desejado. Portanto, se o comando usar INNER JOIN, a seleção de alunos com monitoria está correta, mas a ordenação e a agregação precisam estar corretas.

Na prática, um comando correto seria:

SELECT a.nome, SUM(m.horas) AS total_horas
FROM Aluno a
INNER JOIN Monitoria m ON a.id = m.aluno_id
GROUP BY a.nome
ORDER BY total_horas DESC;

Se o comando da questão não seguir essa estrutura, estará errado. A pegadinha da banca é verificar se o candidato conhece a ordem de execução das cláusulas SQL: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY. Muitos candidatos erram ao colocar o apelido da coluna agregada no WHERE ou ao esquecer o GROUP BY.

NÃO CAIA NESSA!

A banca pode ter apresentado um comando que usa LEFT JOIN em vez de INNER JOIN, o que incluiria alunos sem monitoria, contrariando o requisito de "apenas o Aluno apoiado pela Monitoria". Ou pode ter omitido o GROUP BY, fazendo com que a soma das horas seja calculada de forma incorreta. Fique atento à presença dessas cláusulas.

  1. 1FROM
  2. 2WHERE
  3. 3GROUP BY
  4. 4HAVING
  5. 5SELECT
  6. 6ORDER BY
LEVEL · soulevel.com.br

Alternativa E — ❌ Incorreta (gabarito)

A alternativa E afirma que o comando é capaz de listar corretamente os dados. No entanto, o comando apresentado na questão (não visível aqui) provavelmente contém um erro, como usar LEFT JOIN em vez de INNER JOIN, ou não ordenar corretamente. Como o gabarito é Errado, o comando não atende ao que se pede. A justificativa é que, para listar apenas alunos com monitoria, deve-se usar INNER JOIN, e para somar as horas, é necessário GROUP BY e ORDER BY SUM(horas) DESC. Se o comando não fizer isso, está incorreto.

Gabarito: letra E (Errado).

Link permanente: /questoes/ce190751