DEV Community

Cover image for SQL Exercicios.
Henrique Vital
Henrique Vital

Posted on

1

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

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay