DEV Community

Cover image for SQL Exercicios.
Henrique Vital
Henrique Vital

Posted on

SQL Exercicios.

Aqui estão exercícios SQL com título, tabela, problema, dica e resolução.


1. Recuperar dados simples de uma tabela

Tabela: clientes

| cliente_id | nome | cidade | estado | idade |

|------------|-----------|--------------|--------|-------|

| 1 | Ana | São Paulo | SP | 25 |

| 2 | João | Rio de Janeiro | RJ | 30 |

| 3 | Maria | Belo Horizonte | MG | 35 |

Problema

Liste todos os clientes que moram no estado de São Paulo (SP).

Dica

Use a cláusula WHERE para filtrar os dados com base no estado.

Resolução

SELECT * 
FROM clientes
WHERE estado = 'SP';
Enter fullscreen mode Exit fullscreen mode

2. Ordenar dados por preço

Tabela: produtos

| produto_id | nome_produto | preco | categoria |

|------------|---------------|--------|---------------|

| 1 | Celular | 1500.0 | Eletrônicos |

| 2 | Notebook | 3500.0 | Eletrônicos |

| 3 | Geladeira | 2500.0 | Eletrodomésticos |

Problema

Liste todos os produtos ordenados pelo preço em ordem crescente.

Dica

Use a cláusula ORDER BY para ordenar os dados.

Resolução

SELECT * 
FROM produtos
ORDER BY preco ASC;
Enter fullscreen mode Exit fullscreen mode

3. Contar o número de registros

Tabela: vendas

| venda_id | cliente_id | valor | data_venda |

|----------|------------|--------|-------------|

| 1 | 1 | 100.0 | 2024-11-01 |

| 2 | 2 | 200.0 | 2024-11-02 |

| 3 | 1 | 300.0 | 2024-11-03 |

Problema

Quantas vendas foram realizadas no total?

Dica

Use a função de agregação COUNT(*).

Resolução

SELECT COUNT(*) AS total_vendas
FROM vendas;
Enter fullscreen mode Exit fullscreen mode

4. Soma de valores por cliente

Tabela: vendas

| venda_id | cliente_id | valor | data_venda |

|----------|------------|--------|-------------|

| 1 | 1 | 100.0 | 2024-11-01 |

| 2 | 2 | 200.0 | 2024-11-02 |

| 3 | 1 | 300.0 | 2024-11-03 |

Problema

Qual foi o valor total das vendas por cliente?

Dica

Use SUM(valor) e GROUP BY para agrupar os dados.

Resolução

SELECT cliente_id, SUM(valor) AS total_gasto
FROM vendas
GROUP BY cliente_id;
Enter fullscreen mode Exit fullscreen mode

5. Filtrar por data

Tabela: vendas

| venda_id | cliente_id | valor | data_venda |

|----------|------------|--------|-------------|

| 1 | 1 | 100.0 | 2024-11-01 |

| 2 | 2 | 200.0 | 2024-11-02 |

| 3 | 1 | 300.0 | 2024-11-03 |

Problema

Liste todas as vendas realizadas após o dia 1º de novembro de 2024.

Dica

Use a cláusula WHERE com comparação de datas.

Resolução

SELECT *
FROM vendas
WHERE data_venda > '2024-11-01';
Enter fullscreen mode Exit fullscreen mode

6. Encontrar produtos com preço maior que a média

Tabela: produtos

| produto_id | nome_produto | preco | categoria |

|------------|---------------|--------|---------------|

| 1 | Celular | 1500.0 | Eletrônicos |

| 2 | Notebook | 3500.0 | Eletrônicos |

| 3 | Geladeira | 2500.0 | Eletrodomésticos |

Problema

Liste os produtos cujo preço seja maior que a média de todos os produtos.

Dica

Use uma subconsulta para calcular a média dos preços.

Resolução

SELECT nome_produto, preco
FROM produtos
WHERE preco > (SELECT AVG(preco) FROM produtos);
Enter fullscreen mode Exit fullscreen mode

7. Agrupar e filtrar com HAVING

Tabela: vendas

| venda_id | cliente_id | valor | data_venda |

|----------|------------|--------|-------------|

| 1 | 1 | 100.0 | 2024-11-01 |

| 2 | 2 | 200.0 | 2024-11-02 |

| 3 | 1 | 300.0 | 2024-11-03 |

Problema

Liste os clientes que realizaram mais de uma venda.

Dica

Use GROUP BY para agrupar e HAVING para filtrar após o agrupamento.

Resolução

SELECT cliente_id, COUNT(*) AS total_vendas
FROM vendas
GROUP BY cliente_id
HAVING COUNT(*) > 1;
Enter fullscreen mode Exit fullscreen mode

8. Subconsulta em uma cláusula WHERE

Tabela: produtos

| produto_id | nome_produto | preco | categoria |

|------------|---------------|--------|---------------|

| 1 | Celular | 1500.0 | Eletrônicos |

| 2 | Notebook | 3500.0 | Eletrônicos |

| 3 | Geladeira | 2500.0 | Eletrodomésticos |

Problema

Liste os produtos cuja categoria seja "Eletrônicos" e cujo preço seja superior ao preço médio dos produtos dessa categoria.

Dica

Use uma subconsulta dentro da cláusula WHERE para calcular a média dos preços.

Resolução

SELECT nome_produto, preco, categoria
FROM produtos
WHERE categoria = 'Eletrônicos'
AND preco > (SELECT AVG(preco) FROM produtos WHERE categoria = 'Eletrônicos');
Enter fullscreen mode Exit fullscreen mode

9. Função de janela: soma acumulada

Tabela: vendas

| venda_id | cliente_id | valor | data_venda |

|----------|------------|--------|-------------|

| 1 | 1 | 100.0 | 2024-11-01 |

| 2 | 2 | 200.0 | 2024-11-02 |

| 3 | 1 | 300.0 | 2024-11-03 |

Problema

Adicione uma coluna que mostre a soma acumulada das vendas, ordenada pela data da venda.

Dica

Use a função de janela SUM() com OVER() para somar acumuladamente.

Resolução

SELECT venda_id, cliente_id, valor, 
       SUM(valor) OVER (ORDER BY data_venda) AS soma_acumulada
FROM vendas;
Enter fullscreen mode Exit fullscreen mode

10. Join entre tabelas: Clientes e Vendas

Tabelas: clientes e vendas

| cliente_id | nome | cidade | estado | idade |

|------------|-----------|--------------|--------|-------|

| 1 | Ana | São Paulo | SP | 25 |

| 2 | João | Rio de Janeiro | RJ | 30 |

| 3 | Maria | Belo Horizonte | MG | 35 |

venda_id cliente_id valor data_venda
1 1 100.0 2024-11-01
2 2 200.0 2024-11-02
3 1 300.0 2024-11-03

Problema

Exiba o nome do cliente e o valor total gasto por ele.

Dica

Use JOIN para combinar as tabelas clientes e vendas e depois some os valores de cada cliente.

Resolução

SELECT c.nome, SUM(v.valor) AS total_gasto
FROM clientes c
JOIN vendas v ON c.cliente_id = v.cliente_id
GROUP BY c.nome

;
Enter fullscreen mode Exit fullscreen mode

Claro! Aqui estão mais 10 exercícios no mesmo formato que você pediu.


11. Recuperar dados de várias tabelas com JOIN

Tabelas: clientes e pedidos

| cliente_id | nome | cidade | estado |

|------------|----------|-------------|--------|

| 1 | Ana | São Paulo | SP |

| 2 | João | Rio de Janeiro | RJ |

| 3 | Maria | Belo Horizonte | MG |

pedido_id cliente_id valor data_pedido
1 1 150.0 2024-11-01
2 2 200.0 2024-11-02
3 1 300.0 2024-11-03

Problema

Exiba o nome do cliente e os detalhes dos pedidos feitos por ele.

Dica

Use JOIN para unir as tabelas clientes e pedidos com base na coluna cliente_id.

Resolução

SELECT c.nome, p.pedido_id, p.valor, p.data_pedido
FROM clientes c
JOIN pedidos p ON c.cliente_id = p.cliente_id;
Enter fullscreen mode Exit fullscreen mode

12. Filtrar dados com IN

Tabela: produtos

| produto_id | nome_produto | categoria | preco |

|------------|--------------|-------------|--------|

| 1 | Celular | Eletrônicos | 1500.0 |

| 2 | Notebook | Eletrônicos | 3500.0 |

| 3 | Geladeira | Eletrodomésticos | 2500.0 |

Problema

Liste os produtos que pertencem às categorias "Eletrônicos" ou "Eletrodomésticos".

Dica

Use a cláusula IN para especificar múltiplos valores possíveis para a coluna categoria.

Resolução

SELECT nome_produto, categoria
FROM produtos
WHERE categoria IN ('Eletrônicos', 'Eletrodomésticos');
Enter fullscreen mode Exit fullscreen mode

13. Encontrar o maior valor de uma coluna

Tabela: vendas

| venda_id | cliente_id | valor | data_venda |

|----------|------------|--------|-------------|

| 1 | 1 | 100.0 | 2024-11-01 |

| 2 | 2 | 200.0 | 2024-11-02 |

| 3 | 1 | 500.0 | 2024-11-03 |

Problema

Encontre a maior venda registrada.

Dica

Use a função de agregação MAX() para encontrar o maior valor.

Resolução

SELECT MAX(valor) AS maior_venda
FROM vendas;
Enter fullscreen mode Exit fullscreen mode

14. Ordenar dados por múltiplas colunas

Tabela: clientes

| cliente_id | nome | idade | cidade |

|------------|----------|-------|--------------|

| 1 | Ana | 25 | São Paulo |

| 2 | João | 30 | Rio de Janeiro |

| 3 | Maria | 28 | Belo Horizonte |

Problema

Liste os clientes ordenados primeiro pela idade em ordem crescente e depois pelo nome em ordem alfabética.

Dica

Use ORDER BY com múltiplas colunas.

Resolução

SELECT nome, idade, cidade
FROM clientes
ORDER BY idade ASC, nome ASC;
Enter fullscreen mode Exit fullscreen mode

15. Atualizar valores em uma tabela

Tabela: produtos

| produto_id | nome_produto | preco | categoria |

|------------|--------------|--------|---------------|

| 1 | Celular | 1500.0 | Eletrônicos |

| 2 | Notebook | 3500.0 | Eletrônicos |

| 3 | Geladeira | 2500.0 | Eletrodomésticos |

Problema

Aumente o preço de todos os produtos da categoria "Eletrônicos" em 10%.

Dica

Use a instrução UPDATE com uma cláusula SET para modificar valores.

Resolução

UPDATE produtos
SET preco = preco * 1.10
WHERE categoria = 'Eletrônicos';
Enter fullscreen mode Exit fullscreen mode

16. Remover registros de uma tabela

Tabela: clientes

| cliente_id | nome | cidade | estado |

|------------|----------|--------------|--------|

| 1 | Ana | São Paulo | SP |

| 2 | João | Rio de Janeiro | RJ |

| 3 | Maria | Belo Horizonte | MG |

Problema

Exclua todos os clientes que moram no estado de Minas Gerais (MG).

Dica

Use a instrução DELETE com uma cláusula WHERE para remover registros específicos.

Resolução

DELETE FROM clientes
WHERE estado = 'MG';
Enter fullscreen mode Exit fullscreen mode

17. Subconsulta em uma cláusula SELECT

Tabela: produtos

| produto_id | nome_produto | preco | categoria |

|------------|--------------|--------|---------------|

| 1 | Celular | 1500.0 | Eletrônicos |

| 2 | Notebook | 3500.0 | Eletrônicos |

| 3 | Geladeira | 2500.0 | Eletrodomésticos |

Problema

Liste todos os produtos, incluindo o preço médio dos produtos da mesma categoria.

Dica

Use uma subconsulta na cláusula SELECT para calcular a média dos preços por categoria.

Resolução

SELECT nome_produto, preco, categoria,
       (SELECT AVG(preco) FROM produtos p2 WHERE p2.categoria = p1.categoria) AS media_categoria
FROM produtos p1;
Enter fullscreen mode Exit fullscreen mode

18. Utilizar CASE para criar colunas condicionais

Tabela: vendas

| venda_id | cliente_id | valor | data_venda |

|----------|------------|--------|-------------|

| 1 | 1 | 100.0 | 2024-11-01 |

| 2 | 2 | 200.0 | 2024-11-02 |

| 3 | 1 | 300.0 | 2024-11-03 |

Problema

Crie uma coluna adicional que indique se o valor da venda é maior que 150.0, com "Alta" ou "Baixa" venda.

Dica

Use a função CASE para criar uma condição.

Resolução

SELECT venda_id, cliente_id, valor, data_venda,
       CASE 
           WHEN valor > 150.0 THEN 'Alta'
           ELSE 'Baixa'
       END AS tipo_venda
FROM vendas;
Enter fullscreen mode Exit fullscreen mode

19. Encontrar registros duplicados

Tabela: clientes

| cliente_id | nome | cidade | estado |

|------------|----------|--------------|--------|

| 1 | Ana | São Paulo | SP |

| 2 | João | Rio de Janeiro | RJ |

| 3 | Ana | São Paulo | SP |

Problema

Encontre clientes que possuem o mesmo nome e cidade.

Dica

Use GROUP BY e HAVING para identificar duplicados.

Resolução

SELECT nome, cidade, COUNT(*) AS qtd
FROM clientes
GROUP BY nome, cidade
HAVING COUNT(*) > 1;
Enter fullscreen mode Exit fullscreen mode

20. Consultar dados com LIKE

Tabela: produtos

| produto_id | nome_produto | categoria |

|------------|--------------|---------------|

| 1 | Celular | Eletrônicos |

| 2 | Notebook | Eletrônicos |

| 3 | Geladeira | Eletrodomésticos |

Problema

Liste todos os produtos cujo nome começa com "Cel".

Dica

Use a cláusula LIKE com o operador % para buscar padrões.

Resolução

SELECT nome_produto
FROM produtos
WHERE nome_produto LIKE 'Cel%';
Enter fullscreen mode Exit fullscreen mode

Aqui estão mais 10 exercícios SQL no formato solicitado:


21. Agrupar dados com COUNT

Tabela: pedidos

| pedido_id | cliente_id | valor | data_pedido |

|-----------|------------|--------|--------------|

| 1 | 1 | 100.0 | 2024-11-01 |

| 2 | 2 | 200.0 | 2024-11-02 |

| 3 | 1 | 150.0 | 2024-11-03 |

Problema

Conte quantos pedidos cada cliente fez.

Dica

Use a função COUNT() para contar o número de pedidos por cliente.

Resolução

SELECT cliente_id, COUNT(*) AS total_pedidos
FROM pedidos
GROUP BY cliente_id;
Enter fullscreen mode Exit fullscreen mode

22. Limitar o número de resultados

Tabela: produtos

| produto_id | nome_produto | preco |

|------------|--------------|--------|

| 1 | Celular | 1500.0 |

| 2 | Notebook | 3500.0 |

| 3 | Geladeira | 2500.0 |

Problema

Liste apenas os 2 produtos mais caros.

Dica

Use LIMIT para restringir o número de resultados retornados.

Resolução

SELECT nome_produto, preco
FROM produtos
ORDER BY preco DESC
LIMIT 2;
Enter fullscreen mode Exit fullscreen mode

23. Excluir dados com base em outra tabela

Tabela: clientes

| cliente_id | nome | cidade | estado |

|------------|----------|--------------|--------|

| 1 | Ana | São Paulo | SP |

| 2 | João | Rio de Janeiro | RJ |

Tabela: pedidos

| pedido_id | cliente_id | valor |

|------------|------------|--------|

| 1 | 1 | 100.0 |

| 2 | 2 | 200.0 |

Problema

Excluir todos os clientes que não realizaram pedidos.

Dica

Use uma subconsulta para encontrar os clientes sem pedidos e depois exclua-os.

Resolução

DELETE FROM clientes
WHERE cliente_id NOT IN (SELECT DISTINCT cliente_id FROM pedidos);
Enter fullscreen mode Exit fullscreen mode

24. Encontrar valores nulos

Tabela: clientes

| cliente_id | nome | cidade | estado |

|------------|----------|--------------|--------|

| 1 | Ana | São Paulo | SP |

| 2 | João | NULL | RJ |

| 3 | Maria | Belo Horizonte | MG |

Problema

Liste os clientes cujas cidades estão nulas.

Dica

Use IS NULL para encontrar valores nulos em uma coluna.

Resolução

SELECT nome, cidade
FROM clientes
WHERE cidade IS NULL;
Enter fullscreen mode Exit fullscreen mode

25. Calcular soma com GROUP BY

Tabela: vendas

| venda_id | cliente_id | valor | data_venda |

|----------|------------|--------|-------------|

| 1 | 1 | 100.0 | 2024-11-01 |

| 2 | 2 | 200.0 | 2024-11-02 |

| 3 | 1 | 150.0 | 2024-11-03 |

Problema

Calcule o total de vendas por cliente.

Dica

Use a função SUM() para somar os valores das vendas e agrupar por cliente.

Resolução

SELECT cliente_id, SUM(valor) AS total_vendas
FROM vendas
GROUP BY cliente_id;
Enter fullscreen mode Exit fullscreen mode

26. Subconsulta no WHERE

Tabela: clientes

| cliente_id | nome | cidade | estado |

|------------|----------|--------------|--------|

| 1 | Ana | São Paulo | SP |

| 2 | João | Rio de Janeiro | RJ |

Tabela: pedidos

| pedido_id | cliente_id | valor |

|------------|------------|--------|

| 1 | 1 | 100.0 |

| 2 | 2 | 200.0 |

Problema

Liste os clientes que fizeram um pedido com valor superior a 150.

Dica

Use uma subconsulta para filtrar os clientes que possuem pedidos de valor maior que 150.

Resolução

SELECT nome, cidade
FROM clientes
WHERE cliente_id IN (SELECT DISTINCT cliente_id FROM pedidos WHERE valor > 150);
Enter fullscreen mode Exit fullscreen mode

27. Alterar nome de coluna

Tabela: produtos

| produto_id | nome_produto | preco |

|------------|--------------|--------|

| 1 | Celular | 1500.0 |

| 2 | Notebook | 3500.0 |

Problema

Renomeie a coluna preco para valor_produto.

Dica

Use ALTER TABLE para renomear uma coluna.

Resolução

ALTER TABLE produtos
RENAME COLUMN preco TO valor_produto;
Enter fullscreen mode Exit fullscreen mode

28. Dividir dados com SUBSTRING

Tabela: clientes

| cliente_id | nome | cidade |

|------------|----------|--------------|

| 1 | Ana | São Paulo |

| 2 | João | Rio de Janeiro |

Problema

Exiba os primeiros 3 caracteres do nome de cada cliente.

Dica

Use a função SUBSTRING() para extrair parte de uma string.

Resolução

SELECT nome, SUBSTRING(nome, 1, 3) AS primeiros_3_caracteres
FROM clientes;
Enter fullscreen mode Exit fullscreen mode

29. Calcular a média de uma coluna

Tabela: vendas

| venda_id | cliente_id | valor |

|----------|------------|--------|

| 1 | 1 | 100.0 |

| 2 | 2 | 200.0 |

| 3 | 1 | 150.0 |

Problema

Calcule o valor médio das vendas.

Dica

Use a função AVG() para calcular a média de uma coluna numérica.

Resolução

SELECT AVG(valor) AS media_vendas
FROM vendas;
Enter fullscreen mode Exit fullscreen mode

30. Consultar dados com BETWEEN

Tabela: produtos

| produto_id | nome_produto | preco |

|------------|--------------|--------|

| 1 | Celular | 1500.0 |

| 2 | Notebook | 3500.0 |

| 3 | Geladeira | 2500.0 |

Problema

Liste os produtos que têm preço entre 1500 e 3000.

Dica

Use BETWEEN para filtrar dados dentro de um intervalo.

Resolução

SELECT nome_produto, preco
FROM produtos
WHERE preco BETWEEN 1500.0 AND 3000.0;
Enter fullscreen mode Exit fullscreen mode

Top comments (0)