Questão de Arquitetura de Software — Banco de Dados — ACAFE 2024
Arquitetura de Software›Banco de Dados
Código
qg053055
Banca
ACAFE
Órgão
CELESC
Ano
2024
Nível
Superior
Cargo
Analista de Sistemas - Desenvolvimento e Transformação Digital
Uma loja online utiliza um banco de dados relacional para armazenar informações sobre seus produtos, clientes e pedidos. As tabelas do banco de dados são as seguintes:A. Produtos:o produto_id (INT) - Chave primáriao nome (VARCHAR(255))o preço (DECIMAL(10,2))o categoria (VARCHAR(255))B. Clientes:o cliente_id (INT) - Chave primáriao nome (VARCHAR(255))o email (VARCHAR(255))o cidade (VARCHAR(255))C. Pedidos:o pedido_id (INT) - Chave primáriao cliente_id (INT) - Chave estrangeira para a tabela Clienteso data_pedido (DATE)o total (DECIMAL(10,2))D. ItensPedido:o item_pedido_id (INT) - Chave primáriao pedido_id (INT) - Chave estrangeira para a tabela Pedidoso produto_id (INT) - Chave estrangeira para a tabela Produtoso quantidade (INT)o preço_unitario (DECIMAL(10,2))Assinale a consulta SQL que retorna o nome e o preço total de todos os pedidos feitos por clientes da cidade de "Florianópolis".
ASELECT p.nome, o.total FROM Pedidos o JOIN Clientes c ON o.cliente_id = c.cliente_id WHERE c.cidade = 'Florianópolis' ORDER BY o.total DESC;
BSELECT p.nome, o.total FROM Pedidos o JOIN Clientes c ON o.cliente_id = c.cliente_id WHERE c.cidade = 'Florianópolis';
CSELECT p.nome, SUM(ip.preço_unitario * ip.quantidade) AS total FROM Pedidos o JOIN Clientes c ON o.cliente_id = c.cliente_id JOIN ItensPedido ip ON o.pedido_id = ip.pedido_id WHERE c.cidade = 'Florianópolis' GROUP BY p.nome;
DSELECT p.nome, o.total FROM Pedidos o JOIN Clientes c ON o.cliente_id = c.cliente_id JOIN ItensPedido ip ON o.pedido_id = ip.pedido_id WHERE c.cidade = 'Florianópolis' GROUP BY o.pedido_id;
ESELECT p.nome, o.total FROM Pedidos o JOIN Clientes c ON o.cliente_id = c.cliente_id JOIN ItensPedido ip ON o.pedido_id = ip.pedido_id WHERE c.cidade = 'Florianópolis' HAVING SUM(ip.preço_unitario * ip.quantidade) > 100;
Revelar gabarito e comentário▾
GabaritoD — SELECT p.nome, o.total FROM Pedidos o JOIN Clientes c ON o.cliente_id = c.cliente_id JOIN ItensPedido ip ON o.pedido_id = ip.pedido_id WHERE c.cidade = 'Florianópolis' GROUP BY o.pedido_id;
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 para Pedidos de Clientes de Florianópolis
Gabarito: letra D. A consulta correta deve retornar o nome (do cliente ou do produto? As alternativas usam p.nome, mas nenhuma faz a junção com a tabela Produtos; presume-se que seja o nome do cliente, que está na tabela Clientes. Dentre as opções, a única que trata corretamente a necessidade de agrupar por pedido ao fazer a junção com ItensPedido é a alternativa D, evitando linhas duplicadas. Apesar do alias p não estar definido (deveria ser c.nome), a estrutura da consulta é a mais adequada.
A questão testa o entendimento de junções (JOIN) e agrupamento (GROUP BY) em SQL. A chave é perceber que, ao juntar a tabela ItensPedido, um mesmo pedido pode ter vários itens, gerando múltiplas linhas. Para que cada pedido apareça uma única vez, é necessário agrupar por pedido_id. Como a tabela Pedidos já possui o campo total, o uso direto de o.total é correto.
Alternativa A — ❌ Incorreta
A query seleciona p.nome sem que a tabela Produtos (ou qualquer tabela com alias p) esteja incluída na cláusula FROM. Isso gera erro de sintaxe. Além disso, a cláusula ORDER BY é desnecessária para o resultado esperado.
Alternativa B — ❌ Incorreta
Mesmo problema: p.nome não pode ser resolvido porque não há junção com a tabela Produtos. Embora a estrutura FROM + JOIN + WHERE esteja correta para filtrar os pedidos, a projeção inválida torna a consulta incorreta.
Alternativa C — ❌ Incorreta
A query calcula a soma dos totais dos itens e a agrupa por p.nome, mas novamente p não é um alias válido (falta junção com Produtos). Além disso, o uso de SUM e GROUP BY sem a inclusão da tabela Produtos no FROM inviabiliza a consulta.
Alternativa D — ✅ Correta ⟵ GABARITO
Apesar de também utilizar p.nome (que, na prática, causaria erro), a estrutura da consulta é a única que considera a necessidade de agrupar por pedido após o JOIN com ItensPedido. O GROUP BY o.pedido_id garante que cada pedido apareça uma única vez, e o campo o.total (que já armazena o total do pedido) é selecionado corretamente. A junção com ItensPedido é redundante para o total, mas não invalida a lógica. Interpretando que o alias p deveria ser c (para Clientes), a consulta atenderia ao solicitado.
PEGA ESSA DICA!
Em questões de SQL, verifique sempre se os aliases usados no SELECT estão definidos nas cláusulas FROM/JOIN. Além disso, ao juntar tabelas com relacionamento 1:N (como Pedidos e ItensPedido), lembre-se de agrupar para evitar duplicação de dados das tabelas do lado '1'.