Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024

Banco de DadosConsultas e Comandos em SQL
Código
ce403673
Banca
CESPE / CEBRASPE
Órgão
TSE
Ano
2024
Cargo
TJ

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.


CREATE TABLE Aluno (
matricula integer,
nome varchar(50),
cpf integer,
PRIMARY KEY(matricula)
);


CREATE TABLE Monitoria (
cod_monitoria integer,
dia_da_semana char(20),
numero_de_horas integer,
matricula_aluno_atendido integer,
matricula_aluno_monitor integer,
cod_disciplina_apoiada integer,
PRIMARY KEY(cod_monitoria),
FOREIGN KEY (matricula_aluno_atendido) REFERENCES
Aluno (matricula),
FOREIGN KEY (matricula_aluno_monitor) REFERENCES
Aluno (matricula),
FOREIGN KEY (cod_disciplina_apoiada) REFERENCES
Disciplina (cod_disciplina)
);


A partir dessas informações, julgue o próximo item.

 

O comando SQL a seguir permite listar o nome das disciplinas que estão sendo apoiadas pela Monitoria e a respectiva quantidade de alunos atendidos em cada disciplina.

 

SELECT nome_disciplina,
COUNT(cod_disciplina_apoiada) as
quantidade_de_alunos
FROM Monitoria, Disciplina
WHERE cod_disciplina = cod_disciplina_apoiada
GROUP BY cod_disciplina_apoiada;

  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Esta resolução diverge do gabarito oficial. A banca deu Certo; a resolução abaixo sustenta o contrário e explica por quê — ela não foi reescrita para concordar. Acontece nos dois sentidos: há gabarito que cai em recurso e há resolução que erra. Confira na fonte antes de fixar o entendimento.
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 – Consulta com JOIN e GROUP BY para Contagem de Alunos Atendidos

Gabarito: Errado. O comando SQL apresentado não permite listar o nome das disciplinas apoiadas pela Monitoria e a respectiva quantidade de alunos atendidos em cada disciplina, pois a cláusula GROUP BY agrupa por cod_disciplina_apoiada, mas a projeção (SELECT) inclui nome_disciplina, que não está no agrupamento. Em SQL, toda coluna não agregada no SELECT deve aparecer no GROUP BY; caso contrário, a consulta é inválida na maioria dos SGBDs (ou retorna valores arbitrários em outros).

O comando SELECT é a base da consulta em SQL, e sua estrutura segue uma ordem lógica de execução que difere da ordem em que as cláusulas são escritas. A ordem de execução é: FROMWHEREGROUP BYHAVINGSELECTORDER BY. Isso significa que o GROUP BY é processado antes do SELECT, e é por isso que as colunas não agregadas na projeção precisam estar no agrupamento. No comando em questão, a consulta junta as tabelas Monitoria e Disciplina (produto cartesiano filtrado pelo WHERE), agrupa os registros por cod_disciplina_apoiada e, em seguida, tenta projetar nome_disciplina e a contagem COUNT(cod_disciplina_apoiada). Como nome_disciplina não está no GROUP BY, a consulta viola a regra de agrupamento.

Para que a consulta funcionasse corretamente, seria necessário incluir nome_disciplina na cláusula GROUP BY, ou seja, GROUP BY cod_disciplina_apoiada, nome_disciplina. Dessa forma, o banco saberia que a projeção de nome_disciplina é determinada pelo grupo, e a contagem de alunos atendidos seria calculada por disciplina. Sem essa inclusão, a consulta está incorreta.

NÃO CAIA NESSA!

A banca explora a confusão entre a ordem de escrita e a ordem de execução das cláusulas SQL. O candidato pode achar que, por o GROUP BY vir depois do WHERE, ele é processado depois do SELECT, mas na verdade o GROUP BY é processado antes do SELECT. Por isso, a projeção de colunas não agregadas exige que elas estejam no agrupamento. Fique atento: se a coluna não está no GROUP BY e não é uma função de agregação, a consulta está errada.

NÃO CAIA NESSA!

Para resolver questões de SQL que envolvem GROUP BY, verifique sempre se todas as colunas do SELECT que não são funções de agregação (como COUNT, SUM, AVG) estão presentes no GROUP BY. Se alguma estiver faltando, a consulta é inválida. Essa é uma das pegadinhas mais comuns em provas de banco de dados.

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

Item — ❌ Errado

O comando SQL apresentado está incorreto porque a cláusula GROUP BY agrupa apenas por cod_disciplina_apoiada, mas a projeção (SELECT) inclui nome_disciplina, que não está no agrupamento. Em SQL, toda coluna não agregada no SELECT deve aparecer no GROUP BY; caso contrário, a consulta é inválida na maioria dos SGBDs (ou retorna valores arbitrários em outros). Para que a consulta funcionasse corretamente, seria necessário incluir nome_disciplina na cláusula GROUP BY, ou seja, GROUP BY cod_disciplina_apoiada, nome_disciplina. Dessa forma, o banco saberia que a projeção de nome_disciplina é determinada pelo grupo, e a contagem de alunos atendidos seria calculada por disciplina. Sem essa inclusão, a consulta está incorreta.

Gabarito: Errado

Link permanente: /questoes/ce403673