As tabelas, a seguir, foram criadas no banco de dados relaci...

Próximas questões
Com base no mesmo assunto
Ano: 2025 Banca: FUVEST Órgão: USP Prova: FUVEST - 2025 - USP - Analista de Sistemas |
Q3509649 Banco de Dados
As tabelas, a seguir, foram criadas no banco de dados relacional para armazenar informações sobre vendas:

CREATE TABLE Clientes (  Cliente_ID INT PRIMARY KEY,  Nome VARCHAR(100),  Cidade VARCHAR(100),  Estado CHAR(2) );
CREATE TABLE Pedidos (  Pedido_ID INT PRIMARY KEY,  Cliente_ID INT,  Data_Pedido DATE,  Valor_Total DECIMAL(10,2),  FOREIGN KEY (Cliente_ID) REFERENCES Clientes(Cliente_ID) ); 

A consulta SQL, a seguir, retorna quais resultados? 
SELECT c.Nome, COUNT(p.Pedido_ID) AS Num_Pedidos, COALESCE(SUM(p.Valor_Total), 0) AS Total_Gasto FROM Clientes c LEFT JOIN Pedidos p ON c.Cliente_ID = p.Cliente_ID WHERE p.Data_Pedido >= '2025-02-01' GROUP BY c.Nome HAVING COUNT(p.Pedido_ID) >= 1; 
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa Correta: C

1. Tema central da questão

A questão trata de consulta SQL com JOIN, cláusulas WHERE, GROUP BY e HAVING em bancos de dados relacionais. Esses são conhecimentos essenciais em provas de concursos para compreender como recuperar, filtrar e agrupar dados de tabelas relacionadas.

2. Resumo Teórico

Um LEFT JOIN seleciona todos os registros da tabela à esquerda ("Clientes") e os relacionados da tabela à direita ("Pedidos"), preenchendo com NULL se não houver correspondência. A cláusula WHERE filtra linhas baseadas numa condição – aqui, pedidos a partir de '2025-02-01'. O GROUP BY agrupa por cliente e o HAVING filtra grupos segundo uma condição agregada (neste caso, clientes que fizeram pelo menos um pedido no período).

Fontes: Elmasri & Navathe, Sistemas de Banco de Dados, Cap. 6; Documentação oficial do SQL Server e PostgreSQL.

3. Justificativa da Resposta Correta (C)

A consulta retorna apenas os clientes que fizeram ao menos um pedido a partir de 01/02/2025, mostrando o nome, número de pedidos e total gasto. Isso ocorre porque:

  • O LEFT JOIN poderia trazer todos os clientes, mas o WHERE p.Data_Pedido >= '2025-02-01' filtra apenas linhas com pedido a partir dessa data.
  • O HAVING COUNT(p.Pedido_ID) >= 1 elimina grupos de clientes sem pedidos nesse período.
Assim, só entram clientes que têm pelo menos um pedido após a data especificada.

4. Análise das Alternativas Incorretas

  • A – Incorreta. O WHERE elimina clientes sem pedidos na data, então não retorna todos os clientes e nem exibe NULL para quem não comprou.
  • B – Incorreta. A condição do WHERE exige pedidos a partir de 01/02/2025, e não antes.
  • D – Incorreta. Apesar do LEFT JOIN, só aparecem os clientes que fizeram pedidos no período, pois o WHERE filtra os demais.
  • E – Incorreta. Não há erro no uso do HAVING COUNT(); seu uso está correto para filtrar grupos.

Estratégia de interpretação: preste atenção no efeito do LEFT JOIN combinado com o WHERE: muitas vezes, o filtro do WHERE “anula” a vantagem do LEFT JOIN e só retorna registros da tabela da direita.

Gostou do comentário? Deixe sua avaliação aqui embaixo!

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Errei a questão pois a clausula WHERE após o JOIN elimina as linhas com os clientes que não fizeram pedidos ou fizeram anterior a data Errei a questão porque a cláusula WHERE, após o JOIN, remove os clientes que não fizeram pedidos ou que os fizeram antes da data especificada.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo