Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Resolução do desafio "encontrando clientes sem pedidos"

Sempre opto por criar as tabelas e popular com dados fictícios pra poder exercitar.

Criação de Tabelas

CREATE TABLE ClientesDesafio(
  idclienteD TEXT PRIMARY KEY,
  nomeD VARCHAR (255),
  emailD VARCHAR (100)
  );
CREATE TABLE PedidosDesafio(
  idpedidosD TEXT,
  idclientePD VARCHAR (255),
  DataPedidoD DATE,    
  PRIMARY KEY (idpedidosD)
  FOREIGN KEY (idclientePD) REFERENCES ClientesDesafio(idclienteD)
    );

Inserindo dados

INSERT INTO ClientesDesafio (idcliented,nomeD,emailD) VALUES    
  (1, 'Maria Silva','maria.silva@email.com'),
  (2, 'João Pereira','joao.pereira@email.com'),
  (3, 'Ana Rodrigues','ana.rodrigues@email.com'),
  (4, 'Pedro Alves','pedro.alves@email.com'),
  (5, 'Sofia Santos','sofia.santos@email.com'),
  (6, 'Jorge Lima','jorge.lima@email.com'),
  (7, 'Luisa Ferreira','luisa.ferreira@email.com'),
  (8, 'Carlos Gomes', 'carlos.gomes@email.com'),
  (9, 'Marta Ribeiro','marta.ribeiro@email.com')
  
INSERT INTO PedidosDesafio (idpedidosD, idclientePD, DataPedidoD) VALUES
   ('1','9','2023-01-02 08:15:00'), 
   ('2','4','2023-01-02 08:45:00'), 
   ('3','8','2023-01-02 09:30:00'), 
   ('4','9','2023-01-02 10:00:00'), 
   ('5','7','2023-01-02 11:30:00'), 
   ('6','1','2023-01-02 12:45:00'), 
   ('7','6','2023-01-06 08:30:00'), 
   ('8','9','2023-01-06 09:00:00'), 
   ('9','6','2023-01-06 09:30:00'), 
   ('10','4','2023-01-06 10:15:00'), 
   ('11','6','2023-01-06 10:45:00'), 
   ('12','5','2023-01-06 12:00:00'), 
   ('13','8','2023-01-12 08:15:00'), 
   ('14','1','2023-01-12 09:45:00'), 
   ('15','7','2023-01-12 10:30:00'), 
   ('16','9','2023-01-12 11:00:00') 

Encontrando nome dos clientes que ainda não fizeram pedidos


SELECT cd.nomed
FROM ClientesDesafio cd  
LEFT JOIN PedidosDesafio pd
on cd.idclienteD = pd.idclientePD
WHERE datapedidod is NULL;

Vi que minha resolução ficou diferente da do instrutor, mas da forma que fiz também está correto?

1 resposta
solução!

Boa noite, Érika!

Você está no caminho certo. A lógica de usar um LEFT JOIN e verificar se o campo da tabela de pedidos é NULL é correta. No entanto, há um pequeno detalhe que pode causar diferença em relação à solução do instrutor. A condição no WHERE deve verificar se a chave estrangeira idclientePD na tabela PedidosDesafio é NULL, e não o campo datapedidod.

A primeira vista ambas as consultas podem sim retornar o mesmo resultado, mas, a diferença entre verificar se o campo idclientePD é nulo e verificar se datapedidod é nulo é significativa e eu te explico o porquê logo abaixo:

Ao verificar se idclientePD é nulo, você está especificamente procurando por registros na tabela PedidosDesafio onde não há uma referência para um cliente na tabela ClientesDesafio, ou seja, clientes que não fizeram nenhum pedido.

Por outro lado, se você verificar se datapedidod é nulo, estará procurando por registros na tabela PedidosDesafio onde a data do pedido é nula, o que pode indicar um erro de registro ou algum outro problema, mas não necessariamente indica que o cliente não fez nenhum pedido. Em um cenário real, pode haver registros de pedidos para esse cliente, mas sem uma data de pedido registrada.

Não está errado sua consulta, é apenas um cuidado em relação à lógica.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!