Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023
Banco de Dados›Consultas 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 é:
ASELECT Nome, AVG (Nota) FROM Disciplina;
BSELECT Nome, AVG (Nota) FROM Disciplina WHERE Nome IN GROUP;
CSELECT Nome, AVG (Nota) FROM Disciplina GROUP BY Nome;
DSELECT Nome, AVG (Nota) FROM Disciplina (Nome);
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 é: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER 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.
1SELECT
2FROM
3WHERE
4GROUP BY
5HAVING
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: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY.