Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023

Banco de DadosConsultas e Comandos em SQL
Código
vu195952
Banca
VUNESP
Órgão
CIJUN
Ano
2023
Cargo
Ana ( )

Considere a seguinte tabela de um banco de dados relacional.

 

Disciplina (Nome, NumAluno, Nota)

 

A consulta SQL que possibilita a exibição do nome de cada disciplina e da nota média obtida em cada disciplina é:

  1. ASELECT Nome, AVG (Nota) FROM Disciplina;
  2. BSELECT Nome, AVG (Nota) FROM Disciplina WHERE Nome IN GROUP;
  3. CSELECT Nome, AVG (Nota) FROM Disciplina GROUP BY Nome;
  4. DSELECT Nome, AVG (Nota) FROM Disciplina (Nome);
  5. ESELECT Nome, AVG (Nota) GROUP BY Disciplina (Nome);
Revelar gabarito e comentário

GabaritoC — SELECT Nome, AVG (Nota) FROM Disciplina GROUP BY Nome;

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: agrupamento com GROUP BY e funções agregadas

Gabarito: letra C. Para exibir o nome de cada disciplina e a nota média obtida em cada uma, é obrigatório agrupar os registros por disciplina com a cláusula GROUP BY Nome, permitindo que a função agregada AVG(Nota) calcule a média para cada grupo. A alternativa C é a única que combina corretamente a seleção das colunas, a origem dos dados e o agrupamento necessário.

A consulta pedida envolve uma função agregada (AVG), que resume um conjunto de valores em um único resultado. Quando uma consulta usa funções agregadas e também seleciona colunas comuns da tabela, é preciso definir grupos para que o banco saiba como particionar os dados antes de calcular a agregação. Sem o GROUP BY, o SQL não sabe se a média deve ser calculada sobre todas as linhas da tabela ou sobre subconjuntos — e, na prática, a consulta nem chega a ser executada, pois a sintaxe fica inválida.

A cláusula GROUP BY agrupa as linhas que têm o mesmo valor nas colunas listadas. No caso, GROUP BY Nome cria um grupo para cada disciplina distinta. Dentro de cada grupo, a função AVG(Nota) calcula a média das notas daquelas linhas. O resultado final é uma linha por disciplina, com o nome dela e a média correspondente. Esse é o comportamento exato que o enunciado pede.

Um ponto importante: a cláusula WHERE filtra linhas antes do agrupamento, enquanto a cláusula HAVING filtra grupos depois do agrupamento. Nesta questão, não há filtro algum — queremos todas as disciplinas e todas as notas —, então nem WHERE nem HAVING são necessários. A alternativa correta é justamente a mais simples e direta.

A pegadinha da banca está em oferecer alternativas com sintaxes inventadas ou incompletas, que parecem plausíveis para quem não domina a ordem das cláusulas. A ordem canônica de uma consulta SQL é: SELECTFROMWHEREGROUP BYHAVINGORDER BY. Qualquer desvio dessa ordem, como colocar GROUP BY antes de FROM ou usar parênteses de forma incorreta, torna a consulta inválida. Guarde essa sequência: é ela que separa as alternativas corretas das incorretas.

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

Alternativa A — ❌ Incorreta

Falta a cláusula GROUP BY. A consulta seleciona Nome e AVG(Nota) sem agrupar por Nome, o que é inválido em SQL padrão: quando uma coluna não agregada aparece no SELECT junto com uma função agregada, ela deve estar no GROUP BY. Sem o agrupamento, o banco não sabe como calcular a média por disciplina — a consulta nem executa.

Alternativa B — ❌ Incorreta

A cláusula WHERE Nome IN GROUP é sintaticamente inválida. IN espera uma lista de valores ou uma subconsulta, não a palavra GROUP. Além disso, mesmo que a sintaxe fosse corrigida, ainda faltaria o GROUP BY Nome para agrupar as disciplinas. A alternativa mistura conceitos de filtro (WHERE) com agrupamento (GROUP BY) de forma incorreta.

Alternativa C — ✅ Correta ⟵ GABARITO

A consulta seleciona Nome e AVG(Nota), busca os dados em Disciplina e agrupa por Nome. Com isso, cada disciplina distinta forma um grupo, e a média das notas é calculada dentro de cada grupo. O resultado é exatamente o pedido: o nome de cada disciplina e a nota média obtida em cada uma.

Alternativa D — ❌ Incorreta

A sintaxe FROM Disciplina (Nome) não existe em SQL. Os parênteses após o nome da tabela não têm significado válido nesse contexto — não é assim que se indica agrupamento ou projeção. A forma correta de agrupar é com a cláusula GROUP BY, não com parênteses na cláusula FROM.

Alternativa E — ❌ Incorreta

A cláusula GROUP BY está posicionada antes do FROM, o que viola a ordem canônica das cláusulas SQL. Além disso, a sintaxe GROUP BY Disciplina (Nome) é inválida: GROUP BY recebe uma lista de colunas, não uma tabela com parênteses. A ordem correta seria FROM Disciplina seguido de GROUP BY Nome.

NÃO CAIA NESSA!

A banca explora a confusão entre a ordem das cláusulas e a sintaxe do GROUP BY. Alternativas como D e E parecem plausíveis para quem não domina a estrutura, mas qualquer desvio da ordem SELECT → FROM → GROUP BY torna a consulta inválida. A alternativa B, por sua vez, mistura WHERE com GROUP de forma incorreta. Com treino, você reconhece essas armadilhas de longe 💪

PEGA ESSA DICA!

Sempre que a consulta pedir uma função agregada (AVG, SUM, COUNT, MAX, MIN) junto com colunas comuns, pergunte-se: "por qual coluna devo agrupar?". A resposta é a coluna que aparece no SELECT e não está dentro da função agregada. Nesta questão, é Nome. Memorize a ordem das cláusulas: SELECTFROMWHEREGROUP BYHAVINGORDER BY.

Gabarito: letra C

Link permanente: /questoes/vu195952