# 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.
---