Questão de Banco de Dados — Banco de Dados Relacionais — FUNDATEC 2026
Banco de Dados›Banco de Dados Relacionais
Código
qg685944
Banca
FUNDATEC
Órgão
IFC-SC
Ano
2026
Nível
Superior
Cargo
Professor EBTT - Informática: Engenharia de Software e Banco de Dados
Considere um banco de dados relacional de um e-commerce composto pelas seguintes tabelas e suas respectivas colunas, com os tipos de dados estritamente indicados (chaves primárias sublinhadas):Cliente (ID_Cliente INT, Nome VARCHAR(100))Produto (ID_Produto INT, Tipo VARCHAR(50), Valor DECIMAL(10,2))Compra (ID_Compra INT, ID_Cliente INT, ID_Produto INT, Data_Compra DATE)Um analista de dados precisa gerar um relatório que retorne os nomes dos clientes que compraram produtos do tipo 'livro' durante o mês de dezembro (independentemente do ano), ordenados a partir daqueles que realizaram a maior quantidade de compras para os de menor quantidade. Assinale a alternativa que apresenta o comando SQL correto para obter esse resultado.
ASELECT C.NomeFROM Cliente C INNER JOIN Compra CO ON C.ID_Cliente = CO.ID_ClienteINNER JOIN Produto P ON CO.ID_Produto = P.ID_ProdutoWHERE P.Tipo = 'livro' AND EXTRACT(MONTH FROM CO.Data_Compra) = 12GROUP BY C.ID_Cliente, C.NomeORDER BY COUNT(CO.ID_Compra) DESC;
BSELECT C.NomeFROM Cliente CINNER JOIN Compra CO ON C.ID_Cliente = CO.ID_ClienteINNER JOIN Produto P ON CO.ID_Produto = P.ID_ProdutoWHERE P.Tipo = 'livro' AND EXTRACT(MONTH FROM CO.Data_Compra) = 12GROUP BY P.TipoORDER BY COUNT(CO.ID_Compra) ASC;
CSELECT C.Nome, MAX(COUNT(CO.ID_Compra))FROM Cliente CINNER JOIN Compra CO ON C.ID_Cliente = CO.ID_ClienteINNER JOIN Produto P ON CO.ID_Produto = P.ID_ProdutoWHERE P.Tipo = 'livro' AND EXTRACT(MONTH FROM CO.Data_Compra) = 12GROUP BY C.Nome;
DSELECT C.NomeFROM Cliente CINNER JOIN Compra CO ON C.ID_Cliente = CO.ID_ClienteINNER JOIN Produto P ON CO.ID_Produto = P.ID_ProdutoWHERE P.Tipo = 'livro' AND EXTRACT(MONTH FROM CO.Data_Compra) = 12 ANDCOUNT(CO.ID_Compra) > 0GROUP BY C.ID_Cliente, C.NomeORDER BY C.Nome DESC;
ESELECT C.NomeFROM Cliente CINNER JOIN Compra CO ON C.ID_Cliente = CO.ID_ClienteWHERE CO.Tipo = 'livro' AND EXTRACT(MONTH FROM CO.Data_Compra) = 12GROUP BY C.ID_Cliente, C.NomeORDER BY COUNT(CO.ID_Compra) DESC;
Revelar gabarito e comentário▾
GabaritoA — SELECT C.Nome
FROM Cliente C INNER JOIN Compra CO ON C.ID_Cliente = CO.ID_Cliente
INNER JOIN Produto P ON CO.ID_Produto = P.ID_Produto
WHERE P.Tipo = 'livro' AND EXTRACT(MONTH FROM CO.Data_Compra) = 12
GROUP BY C.ID_Cliente, C.Nome
ORDER BY COUNT(CO.ID_Compra) 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 JOIN, agrupamento e ordenação
Gabarito: letra A. A consulta correta deve unir as tabelas Cliente, Compra e Produto, filtrar produtos do tipo 'livro' e compras de dezembro (EXTRACT(MONTH FROM Data_Compra) = 12), agrupar por cliente (ID_Cliente, Nome) e ordenar pelo número de compras em ordem decrescente (ORDER BY COUNT(...) DESC). A alternativa A é a única que atende a todos esses requisitos.
Alternativa A — ✅ Correta ⟵ GABARITO
Realiza os três INNER JOINs necessários, filtra corretamente P.Tipo = 'livro' e o mês 12 com EXTRACT. Agrupa por C.ID_Cliente, C.Nome (incluindo a chave primária para evitar ambiguidade) e ordena por COUNT(CO.ID_Compra) DESC, conforme exigido.
Alternativa B — ❌ Incorreta
Apresenta dois erros graves: (1) GROUP BY P.Tipo — deveria agrupar por cliente, não por tipo; (2) ORDER BY ... ASC — o enunciado pede ordenação decrescente (maior quantidade primeiro), não crescente.
Alternativa C — ❌ Incorreta
Usa MAX(COUNT(CO.ID_Compra)), que é uma agregação aninhada inválida em SQL (não se pode aplicar MAX sobre uma função agregada). Além disso, GROUP BY C.Nome sem incluir o ID_Cliente pode gerar ambiguidade se houver clientes homônimos.
Alternativa D — ❌ Incorreta
Tenta usar COUNT(CO.ID_Compra) > 0 na cláusula WHERE, o que não é permitido — funções agregadas no WHERE exigem a cláusula HAVING. Além disso, a ordenação é por C.Nome DESC, ignorando a contagem de compras.
Alternativa E — ❌ Incorreta
Filtra por CO.Tipo = 'livro', mas a coluna Tipo pertence à tabela Produto, não a Compra. Portanto, falta o JOIN com Produto e o filtro está na tabela errada, gerando erro de coluna inexistente.
NÃO CAIA NESSA!
A banca tenta confundir o candidato na alternativa E ao colocar CO.Tipo (inexistente) em vez de P.Tipo. Lembre-se: o tipo do produto está na tabela Produto, não em Compra.