---
# System prepended metadata

title: 'Lista 15-07 '

---

# Lista de Exercícios de Revisão SQL 
## Dataset inicial


### Inserts – Produtos
```sql
INSERT INTO produtos (nome, preco, categoria, estoque) VALUES
('Fone Bluetooth', 199.90, 'Eletronicos', 5),
('Notebook Slim 14"', 3499.00, 'Eletronicos', 2),
('Livro: SQL do Zero', 89.90, 'Livros', 10),
('Café Especial 500g', 34.50, 'Alimentos', 20),
('Chocolate Amargo 70%', 12.90, 'Alimentos', 50),
('Cadeira Gamer', 999.00, 'Eletronicos', 3),
('Livro: Estruturas de Dados', 120.00, 'Livros', 8),
('Azeite Extra Virgem 500ml', 39.90, 'Alimentos', 15);
```

### Inserts – Pedidos
```sql
INSERT INTO pedidos (cliente, valor, criado_em) VALUES
('Alice', 250.00, '2025-01-05'),
('Bruno', 120.00, '2025-01-12'),
('Carla', 800.00, '2025-02-03'),
('Alice', 150.00, '2025-02-15'),
('Daniel', 75.00, '2025-03-01'),
('Carla', 600.00, '2025-03-10'),
('Bruno', 90.00, '2025-03-22'),
('Eduarda', 1350.00, '2025-04-05'),
('Alice', 300.00, '2025-04-18'),
('Daniel', 220.00, '2025-05-01');
```

### Inserts – Cupons
```sql
INSERT INTO cupons (codigo, desconto) VALUES
('DESC10', 10.00),
('FRETEGRATIS', 0.00),
('SUPER20', 20.00),
('VIP50', 50.00);
```

---

# Exercícios

## 1. DDL – Definição de Tabelas
1. Crie a tabela `produtos` com id, nome, preço, categoria e estoque.  
2. Adicione a coluna `estoque` com valor default.  
3. Adicione uma restrição para que a categoria só aceite: Eletronicos, Livros ou Alimentos.  
4. Insira 5 produtos de categorias e preços variados.  
5. Delete um produto específico da tabela.  

---

## 2. Filtros e Operadores
6. Liste todos os produtos cujo preço seja maior que 100.  
7. Liste os produtos cujo preço esteja entre 50 e 200.  
8. Liste os produtos das categorias Eletronicos ou Livros.  
9. Liste produtos cujo estoque seja diferente de zero.  
10. Liste produtos cujo nome não contenha a letra “a”.  

---

## 3. Trabalho com Datas
11. Insira 5 pedidos em datas diferentes.  
12. Selecione os pedidos criados após 2025-01-01.  
13. Selecione pedidos feitos em fevereiro de 2025.  
14. Liste pedidos ordenados por data decrescente.  
15. Calcule o número de dias desde cada pedido até hoje.  

---

## 4. Group By e Having
16. Calcule o valor total gasto por cliente.  
17. Calcule a média de pedidos por mês.  
18. Mostre apenas clientes que tenham gasto mais de 500 no total.  
19. Conte quantos pedidos existem por cada mês.  
20. Calcule o maior e menor valor de pedido de cada cliente.  

---

## 5. CTEs (WITH)
21. Crie uma CTE que calcule o total gasto de cada cliente e filtre os acima de 1000.  
22. Crie uma CTE que marque pedidos como “barato” (<100) ou “caro” (>=100) e conte quantos caíram em cada categoria.  
23. Crie uma CTE que adicione um ranking (`ROW_NUMBER`) por data de pedido.  

---

## 6. UNION e UNION ALL
24. Crie a tabela `cupons` com código e desconto.  
25. Use `UNION` para listar nomes de clientes e códigos de cupons em uma única coluna.  
26. Use `UNION ALL` para repetir o exercício anterior e compare a contagem.  
27. Liste produtos com preço > 200 e una com pedidos de valor > 500 em uma mesma coluna chamada valor.  

---

## 7. Views e Materialized Views
28. Crie uma VIEW `resumo_clientes` que mostre cliente, total gasto e quantidade de pedidos.  
29. Crie uma MATERIALIZED VIEW `resumo_mensal` que traga o valor total de pedidos por mês.  
30. Atualize a materialized view (`REFRESH`) e consulte os dados.  
31. Aplique um filtro diretamente na VIEW para mostrar clientes com total gasto acima de 1000.  

---

