1
resposta

Mão na massa: hora da prática

--1 Traga todos os dados da cliente Maria Silva.

SELECT*FROM Clientes WHERE nome LIKE 'Maria Silva';

--2 Busque o ID do pedido e o ID do cliente dos pedidos onde o status esteja como entregue.

SELECT id, idcliente, status FROM Pedidos WHERE status LIKE 'entregue';

--3 Retorne todos os produtos onde o preço seja maior que 10 e menor que 15.

SELECT nome, preco from Produtos WHERE preco BETWEEN 10 and 15;

--4 Busque o nome e cargo dos colaboradores que foram contratados entre 2022-01-01 e 2022-06-30.

SELECT nome, cargo from colaboradores WHERE datacontratacao BETWEEN '2022-01-01' and '2022-06-30';

--5 Recupere o nome do cliente que fez o primeiro pedido.

SELECT c.nome 
FROM Clientes as c 
JOIN Pedidos as p on c.id = p.IDCliente
WHERE p.id = 1;

--6 Liste os produtos que nunca foram pedidos.

SELECT pr.nome
FROM Produtos AS pr
LEFT JOIN Itenspedidos AS ip ON pr.id = ip.IDProduto
WHERE ip.IDProduto IS NULL;

--7 Liste os nomes dos clientes que fizeram pedidos entre 2023-01-01 e 2023-12-31.

SELECT DISTINCT(c.nome)
FROM Clientes as c 
JOIN Pedidos as p on c.id = p.IDCliente
WHERE p.DataHoraPedido BETWEEN '2023-01-01' and '2023-12-31'
ORDER by c.Nome ASC;

--8 Recupere os nomes dos produtos que estão em menos de 15 pedidos.

SELECT p.nome, ip.idproduto, COUNT(ip.idpedido)  Total_pedidos
from Produtos as p
LEFT JOIN Itenspedidos as ip on ip.IDProduto=p.id
GROUP by p.id, p.Nome
HAVING COUNT(ip.IDPedido) < 15;

--9 Liste os produtos e o ID do pedido que foram realizados pelo cliente "Pedro Alves" ou pela cliente "Ana Rodrigues".

SELECT x.nome_cliente, y.nome_produto, y.idpedido
from (SELECT p.id, c.nome as nome_cliente
      from Pedidos p 
      JOIN Clientes c on c.id=p.IDCliente
      WHERE c.Nome like 'Pedro Alves' or c.Nome like 'Ana Rodrigues'
  ) as x
JOIN (SELECT p.id, p.nome as nome_produto, ip.IDPedido 
      FROM Produtos p 
      JOIN Itenspedidos ip on ip.IDProduto=p.id
) as y on y.idpedido=x.id
ORDER by x.nome_cliente ASC;

--10 Recupere o nome e o ID do cliente que mais comprou(valor) no Serenatto.

SELECT * from Itenspedidos; 
--id, idcliente

SELECT p.idcliente, sum(ip.precounitario) as Total_compras
from Pedidos p
JOIN Itenspedidos ip on ip.IDPedido = p.ID
GROUP by idcliente

--codigo final
SELECT c.nome, MAX(pc.Total_compras) as Valor_compra
from (SELECT p.idcliente, sum(ip.precounitario) as Total_compras
      from Pedidos p
      JOIN Itenspedidos ip on ip.IDPedido = p.ID
      GROUP by idcliente) as pc
JOIN Clientes as c on c.id = pc.idcliente
ORDER BY pc.Total_compras DESC
LIMIT 1;
1 resposta

Ei! Tudo bem, Raphael?

Excelente entrega! Você resolveu praticamente todos os exercícios com boas escolhas de JOIN, GROUP BY, HAVING e subqueries, mostrando domínio do conteúdo.

Uma dica, o uso de LIMIT funciona bem em alguns bancos, mas em outros (como SQL Server) o equivalente seria TOP.

Continue se dedicando aos estudos e qualquer dúvida, compartilhe!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!