Abaixo estão 10 exercícios de SQL que abrangem uma variedade de tópicos, desde funções de agregação e string até operadores lógicos e cláusulas de filtragem. Esses exercícios são projetados para serem aplicados em um banco de dados genérico e podem precisar de ajustes para se adequarem a esquemas específicos.
Selecione os primeiros 5 registros da tabela clientes
, ordenando-os pelo nome em ordem crescente.
SELECT * FROM Clientes
ORDER BY primeiro_nome -- Por padrão, a ordem será crescente
LIMIT 5;
Encontre todos os produtos na tabela produtos
que não têm uma descrição associada (suponha que a coluna de descrição possa ser nula).
SELECT * FROM Produtos
WHERE descricao IS NULL;
Liste os funcionários cujo nome começa com 'A' e termina com 's' na tabela funcionarios
.
SELECT * FROM Funcionarios
WHERE nome_funcionario
LIKE 'A%s';
Exiba o departamento e a média salarial dos funcionários em cada departamento na tabela funcionarios
, agrupando por departamento, apenas para os departamentos cuja média salarial é superior a $5000.
SELECT departamento, AVG(salario) AS media_salario_departamento
FROM Funcionarios
GROUP BY departamento
HAVING media_salario_departamento > 5000;
Selecione todos os clientes da tabela clientes
e concatene o primeiro e o último nome, além de calcular o comprimento total do nome completo.
SELECT CONCAT(primeiro_nome, ' ', ultimo_nome) AS nome_completo,
LENGTH(CONCAT(primeiro_nome, ' ', ultimo_nome)) AS tamanho_nome -- Pode-se tirar o espaço também
FROM Clientes;
Para cada venda na tabela vendas
, exiba o ID da venda, a data da venda e a diferença em dias entre a data da venda e a data atual.
SELECT *,
ROUND(JULIANDAY('now') - JULIANDAY(data_venda), 0) AS diferenca_dias
FROM Vendas; -- Usa a data e a hora (pode causar diferença)
SELECT *,
ROUND(JULIANDAY(CURRENT_DATE) - JULIANDAY(data_venda), 0) AS diferenca_dias
FROM Vendas; -- Usa apenas a data
Selecione todos os itens da tabela pedidos
e arredonde o preço total para o número inteiro mais próximo.
SELECT id_pedido, id_cliente, quantidade, ROUND(preco_unitario, 0) preco_unitario_round, preco_total
FROM Pedidos -- 'Atualiza' os números da coluna
SELECT *,
ROUND(preco_unitario) AS preco_unitario_round
FROM Pedidos -- 'Adiciona' uma nova coluna com os valores arredondados
‘Substituindo’ os valores da coluna
‘Adicionando’ uma nova coluna
Converta a coluna data_string
da tabela eventos
, que está em formato de texto (YYYY-MM-DD), para o tipo de data e selecione todos os eventos após '2023-01-01'.
SELECT id_evento, nome_evento,
STRFTIME('%Y-%m-%d', data_evento) AS data_evento_covertida
FROM Eventos
WHERE data_evento_covertida < '2024-01-01';
Na tabela avaliacoes
, classifique cada avaliação como 'Boa', 'Média', ou 'Ruim' com base na pontuação: 1-3 para 'Ruim', 4-7 para 'Média', e 8-10 para 'Boa'.
SELECT *,
CASE
WHEN pontuacao <= 3 THEN 'Ruim'
WHEN pontuacao BETWEEN 4 AND 7 THEN 'Média'
ELSE 'Boa'
END AS classificacao_avaliacao
FROM Avaliacoes
Altere o nome da coluna data_nasc
para data_nascimento
na tabela funcionarios
e selecione todos os funcionários que nasceram após '.
ALTER TABLE Funcionarios
RENAME COLUMN data_nasc TO data_nascimento;
SELECT nome_funcionario, -- Nesse caso, o GPT deixou a data como TEXT
STRFTIME('%Y-%m-%d', data_nascimento) AS data_nascimento_convertida
FROM Funcionarios
WHERE data_nascimento_convertida > '1990-01-01';