Pular para o conteúdo principal

Questão de Banco de Dados — SQL — INSTITUTO AOCP 2025

Banco de DadosSQL
Código
qg539703
Banca
INSTITUTO AOCP
Órgão
IF-PB
Ano
2025
Nível
Superior
Cargo
Analista de Tecnologia da Informação
Durante o desenvolvimento de um sistema acadêmico para o IFPB, o analista de tecnologia da informação precisa gerar um relatório que apresente os nomes dos alunos, seus respectivos cursos e a média das notas obtidas em todas as disciplinas. O relatório deve incluir apenas os alunos com média igual ou superior a 7,0, ordenados pela média em ordem decrescente. Considerando a utilização correta da linguagem SQL (Structured Query Language), assinale a alternativa que apresenta uma consulta adequada para esse cenário.
  1. ASELECT nome, curso, AVG(nota) AS mediaFROM AlunosGROUP BY nome, cursoHAVING AVG(nota) >= 7ORDER BY media DESC;
  2. BGET nome, curso, AVG(nota) FROM AlunosBY nome, cursoWHEN AVG(nota) >= 7SORT DESC;
  3. CSELECT nome, curso, SUM(nota) AS mediaFROM AlunosWHERE nota >= 7GROUP BY nome, cursoORDER BY media DESC;
  4. DSHOW nome, curso, AVG(nota) AS mediaFROM AlunosWHERE media >= 7ORDER BY media DESC;
  5. ESELECT nome, curso, nota FROM AlunosWHERE nota <= 7GROUP BY nome, cursoSORT BY nota DESC;
Revelar gabarito e comentário

GabaritoA — SELECT nome, curso, AVG(nota) AS media FROM Alunos GROUP BY nome, curso HAVING AVG(nota) >= 7 ORDER BY media DESC;

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 agregação, filtro e ordenação

Gabarito: letra A. A consulta correta usa SELECT com a função de agregação AVG(nota), agrupa os resultados por nome e curso com GROUP BY, filtra os grupos pela média com HAVING AVG(nota) >= 7 e ordena pela média em ordem decrescente com ORDER BY media DESC. As demais alternativas apresentam erros de sintaxe ou de lógica, como usar SUM em vez de AVG, filtrar com WHERE uma condição sobre a agregação, ou usar comandos inexistentes no SQL padrão.

A questão cobra o domínio da sintaxe e da semântica da linguagem SQL para consultas com agregação. O cenário pede um relatório com o nome dos alunos, seus cursos e a média das notas, incluindo apenas os alunos com média igual ou superior a 7,0, ordenados pela média em ordem decrescente. Para isso, é necessário entender o papel de cada cláusula da consulta e a ordem lógica de execução delas.

A função AVG é uma função de agregação que calcula a média dos valores de uma coluna numérica. No contexto, AVG(nota) calcula a média das notas de cada aluno. Como o relatório deve apresentar a média por aluno e curso, é preciso agrupar os registros com GROUP BY nome, curso. A cláusula HAVING é usada para filtrar os grupos após a agregação, permitindo a condição AVG(nota) >= 7. Já a cláusula ORDER BY media DESC ordena o resultado pela média em ordem decrescente, usando o alias media definido na projeção.

Um ponto crucial é a diferença entre WHERE e HAVING. O WHERE filtra linhas individuais antes do agrupamento, enquanto o HAVING filtra grupos após a agregação. Por isso, não é possível usar WHERE media >= 7 porque media é um alias criado na projeção e não existe na tabela original. A ordem lógica de execução de uma consulta SQL é: FROMWHEREGROUP BYHAVINGSELECTORDER BY. Isso explica por que o HAVING pode referenciar a função de agregação e o ORDER BY pode usar o alias media.

A pegadinha da banca está em confundir WHERE com HAVING e SUM com AVG. A alternativa C usa SUM(nota) em vez de AVG(nota), o que calcularia a soma das notas, não a média. Além disso, usa WHERE nota >= 7, que filtraria as notas individuais antes do agrupamento, excluindo alunos que tenham alguma nota abaixo de 7, mesmo que a média seja maior. A alternativa D usa WHERE media >= 7, que é inválido porque media é um alias da projeção. As alternativas B e E usam comandos que não existem no SQL padrão, como GET, BY, WHEN, SORT, SHOW e SORT BY.

Guarde a fronteira entre WHERE e HAVING e entre SUM e AVG: é exatamente nela que as alternativas se dividem.

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

Alternativa A — ✅ Correta ⟵ GABARITO

A consulta está correta porque:

  • SELECT nome, curso, AVG(nota) AS media projeta as colunas e calcula a média com alias media.

  • FROM Alunos indica a tabela de origem.

  • GROUP BY nome, curso agrupa os registros por aluno e curso, permitindo o cálculo da média por grupo.

  • HAVING AVG(nota) >= 7 filtra os grupos cuja média é maior ou igual a 7, aplicando a condição sobre a agregação.

  • ORDER BY media DESC ordena o resultado pela média em ordem decrescente, usando o alias definido na projeção.

A ordem lógica de execução respeita a semântica: primeiro agrupa, depois filtra os grupos e, por fim, ordena.

Alternativa B — ❌ Incorreta

A alternativa usa comandos que não existem no SQL padrão: GET, BY, WHEN e SORT. A sintaxe correta para consulta é SELECT ... FROM ... GROUP BY ... HAVING ... ORDER BY .... Não há cláusula BY para agrupamento nem WHEN para filtro de grupos. O comando SORT não é uma cláusula SQL; a ordenação é feita com ORDER BY. Além disso, a consulta não especifica a função de agregação corretamente para o cálculo da média.

Alternativa C — ❌ Incorreta

A alternativa usa SUM(nota) em vez de AVG(nota). A função SUM calcula a soma dos valores, não a média. Além disso, a cláusula WHERE nota >= 7 filtra as notas individuais antes do agrupamento, o que excluiria alunos que tenham alguma nota abaixo de 7, mesmo que a média final seja maior ou igual a 7. O correto seria usar HAVING AVG(nota) >= 7 para filtrar os grupos pela média. A ordenação ORDER BY media DESC está correta, mas a lógica de agregação e filtro está errada.

Alternativa D — ❌ Incorreta

A alternativa usa SHOW em vez de SELECT, que é o comando correto para consulta. Além disso, a cláusula WHERE media >= 7 é inválida porque media é um alias criado na projeção e não existe na tabela original. O filtro sobre a média deve ser feito com HAVING, que é aplicado após o agrupamento. A consulta também não possui GROUP BY, necessário para calcular a média por aluno e curso.

Alternativa E — ❌ Incorreta

A alternativa usa SORT BY em vez de ORDER BY, que é a cláusula correta para ordenação. Além disso, a consulta não usa a função de agregação AVG para calcular a média, apenas seleciona a coluna nota diretamente. A condição WHERE nota <= 7 filtra as notas menores ou iguais a 7, o que é o oposto do que o relatório pede (média >= 7). A cláusula GROUP BY nome, curso está presente, mas sem a função de agregação, a consulta não produz o resultado esperado.

NÃO CAIA NESSA!

A banca adora trocar WHERE por HAVING e SUM por AVG para confundir. Lembre-se: WHERE filtra linhas antes do agrupamento, HAVING filtra grupos depois da agregação. E AVG calcula a média, SUM calcula a soma. Com treino, você enxerga essas trocas de longe 💪.

PEGA ESSA DICA!

Na prova, identifique primeiro se a condição é sobre uma coluna individual (use WHERE) ou sobre uma agregação (use HAVING). Depois, verifique se a função de agregação é a correta para o que se pede (média = AVG, soma = SUM). Por fim, confira a sintaxe da ordenação: ORDER BY coluna DESC para decrescente.

Gabarito: letra A

Link permanente: /questoes/qg539703