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';
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;
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;
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;
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';
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);
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;
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');
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;
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
;
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;
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');
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;
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;
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';
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';
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;
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;
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;
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%';
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;
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;
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);
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;
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;
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);
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;
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;
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;
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;
Top comments (0)