Entendendo dados como quem observa o mundo
Antes de falar de comando, imagine uma cena simples.
Você entra em um supermercado.
Lá existem prateleiras, produtos, preços, marcas, quantidades e categorias. Se você quiser saber alguma coisa dali, quase sempre fará uma pergunta:
- quais produtos existem?
- qual é o mais barato?
- quantos produtos restam?
- qual item mudou de preço?
- qual produto deve sair do cadastro?
SQL é isso: uma forma organizada de fazer perguntas e ações sobre os dados.
No banco de dados, uma tabela funciona como se fosse uma prateleira organizada. Cada linha é um item cadastrado. Cada coluna representa uma informação sobre aquele item.
Vamos imaginar uma tabela chamada produtos.
Nossa tabela de exemplo
CREATE TABLE produtos (
id INTEGER,
nome VARCHAR(100),
categoria VARCHAR(50),
preco NUMERIC(10,2),
quantidade INTEGER
);
Ela poderia guardar dados assim:
| id | nome | categoria | preco | quantidade |
|---|---|---|---|---|
| 1 | Arroz 5kg | Alimentos | 28.90 | 20 |
| 2 | Feijão 1kg | Alimentos | 8.50 | 35 |
| 3 | Sabão em pó | Limpeza | 16.30 | 12 |
| 4 | Detergente | Limpeza | 3.20 | 50 |
| 5 | Café 500g | Alimentos | 14.90 | 18 |
1. SELECT
“Quero olhar antes de mexer”
Imagine que você entrou no estoque do supermercado, mas não quer alterar nada. Você só quer ver o que existe.
Esse é o papel do SELECT.
Ele serve para consultar dados.
Exemplo mais básico
SELECT * FROM produtos;
Isso significa:
- SELECT = selecionar
- * = todas as colunas
- FROM produtos = da tabela produtos
Em português:
“Mostre tudo da tabela produtos.”
Selecionando colunas específicas
SELECT nome, preco FROM produtos;
Em português:
“Mostre apenas o nome e o preço dos produtos.”
Filtrando o que você quer ver
Imagine que você quer ver apenas os produtos de limpeza.
SELECT nome, preco
FROM produtos
WHERE categoria = 'Limpeza';
Em português:
“Mostre nome e preço dos produtos cuja categoria é Limpeza.”
2. INSERT
“Chegou produto novo na prateleira”
O caminhão chegou no supermercado. Vieram novos produtos. Agora você precisa cadastrar esse item no sistema.
Esse é o papel do INSERT.
Ele serve para inserir novos registros.
Exemplo
INSERT INTO produtos (id, nome, categoria, preco, quantidade)
VALUES (6, 'Macarrão 500g', 'Alimentos', 4.99, 40);
Em português:
“Insira na tabela produtos um novo item com esses valores.”
3. UPDATE
“O preço mudou”
O gerente do supermercado decidiu mudar o preço do café. O item continua existindo. Você não vai criar outro produto. Você só vai atualizar uma informação.
Esse é o papel do UPDATE.
Ele serve para alterar dados existentes.
Exemplo
UPDATE produtos
SET preco = 15.90
WHERE id = 5;
Em português:
“Atualize o preço para 15.90 do produto cujo id é 5.”
Outro exemplo
UPDATE produtos
SET quantidade = 45
WHERE id = 4;
Aqui você está alterando a quantidade do detergente em estoque.
Muito importante
Sem WHERE, o estrago pode ser grande.
UPDATE produtos
SET preco = 10.00;
Isso mudaria o preço de todos os produtos.
É como entrar no supermercado e trocar todas as etiquetas de uma vez. Um festival do caos.
4. DELETE
“Esse comando apaga. E apaga mesmo.”
Um produto saiu de linha. Ele não será mais vendido. Você quer remover esse registro do cadastro.
Esse é o papel do DELETE.
Ele serve para excluir registros.
Exemplo
DELETE FROM produtos
WHERE id = 3;
Em português:
“Apague da tabela produtos o item cujo id é 3.”
Por que ele é perigoso?
Porque, assim como no UPDATE, se você esquecer o WHERE, pode apagar tudo.
DELETE FROM produtos;
Isso remove todos os registros da tabela.
Por isso, existe uma regra de ouro:
antes de dar DELETE, faça um SELECT.
SELECT * FROM produtos WHERE id = 3;
Veja primeiro. Apague depois.
PostgreSQL e Oracle no básico
No uso de SELECT, INSERT, UPDATE e DELETE, PostgreSQL e Oracle são muito parecidos.
SELECT
SELECT nome, preco
FROM produtos
WHERE categoria = 'Limpeza';
INSERT
INSERT INTO produtos (id, nome, categoria, preco, quantidade)
VALUES (6, 'Macarrão 500g', 'Alimentos', 4.99, 40);
UPDATE
UPDATE produtos
SET preco = 15.90
WHERE id = 5;
DELETE
DELETE FROM produtos
WHERE id = 3;
COMMIT e ROLLBACK
Aqui entra um conceito importante.
Depois de algumas alterações, você pode confirmar a transação com:
COMMIT;
Isso é como dizer:
“Está certo. Pode gravar de verdade.”
E também pode desfazer antes de confirmar com:
ROLLBACK;
Que seria como dizer:
“Desfaz tudo. Não quero manter essas alterações.”
Agora vamos além do básico
Até aqui você viu comandos para consultar, inserir, alterar e apagar.
Agora começa uma parte poderosa do SQL: fazer perguntas que revelam a verdade.
5. MIN
“Qual é o produto mais barato?”
Imagine uma prateleira com vários produtos que fazem a mesma coisa. Você quer descobrir o menor preço entre eles.
Para isso usamos MIN.
SELECT MIN(preco) AS menor_preco
FROM produtos
WHERE categoria = 'Limpeza';
Em português:
“Qual é o menor preço entre os produtos de limpeza?”
Exemplo mais concreto
Imagine que você quer saber o detergente mais barato.
SELECT MIN(preco) AS menor_preco
FROM produtos
WHERE nome LIKE '%Detergente%';
Aqui a pergunta é:
“Entre os produtos cujo nome contém Detergente, me diga o menor preço.”
6. MAX
“Qual é o mais caro?”
Agora você quer olhar a outra ponta: o maior preço.
SELECT MAX(preco) AS maior_preco
FROM produtos;
Em português:
“Qual é o maior preço cadastrado entre os produtos?”
7. AVG
“Qual é a média?”
Você não quer o mais barato nem o mais caro. Quer saber a média dos preços.
SELECT AVG(preco) AS media_preco
FROM produtos
WHERE categoria = 'Alimentos';
Em português:
“Qual é a média de preço dos produtos da categoria Alimentos?”
8. COUNT
“Quantos existem?”
Você quer saber quantos registros existem.
SELECT COUNT(*) AS total_produtos
FROM produtos;
Em português:
“Quantos produtos existem cadastrados?”
Outro exemplo
SELECT COUNT(*) AS total_limpeza
FROM produtos
WHERE categoria = 'Limpeza';
Em português:
“Quantos produtos de limpeza existem?”
9. SUM
“Quanto dá tudo junto?”
Imagine que você quer somar a quantidade de itens em estoque.
SELECT SUM(quantidade) AS total_estoque
FROM produtos;
Em português:
“Qual é a soma total das quantidades em estoque?”
Outro exemplo útil
SELECT SUM(preco * quantidade) AS valor_total_estoque
FROM produtos;
Aqui você responde:
“Quanto valeria todo esse estoque somado?”
10. ORDER BY
“Quero ver organizado”
Você quer listar os produtos do menor para o maior preço.
SELECT nome, preco
FROM produtos
ORDER BY preco ASC;
- ASC = crescente
- DESC = decrescente
Do maior para o menor:
SELECT nome, preco
FROM produtos
ORDER BY preco DESC;
11. GROUP BY
“Quero resumir por grupo”
Agora você não quer ver produto por produto. Quer um resumo por categoria.
SELECT categoria, COUNT(*) AS total
FROM produtos
GROUP BY categoria;
Em português:
“Quantos produtos existem em cada categoria?”
Outro exemplo
SELECT categoria, AVG(preco) AS media_preco
FROM produtos
GROUP BY categoria;
Em português:
“Qual é a média de preço por categoria?”
Exemplo do mundo real
Imagine uma prateleira com vários produtos de limpeza:
| nome | categoria | preco |
|---|---|---|
| Detergente A | Limpeza | 2.90 |
| Detergente B | Limpeza | 3.20 |
| Detergente C | Limpeza | 2.70 |
| Sabão Líquido X | Limpeza | 18.00 |
Agora vem a pergunta:
“Qual é o menor valor entre produtos que fazem a mesma coisa?”
Se você quiser filtrar só detergentes, pode fazer assim:
PostgreSQL
SELECT MIN(preco) AS menor_preco
FROM produtos
WHERE nome ILIKE '%detergente%';
Oracle
SELECT MIN(preco) AS menor_preco
FROM produtos
WHERE UPPER(nome) LIKE '%DETERGENTE%';
Por que a diferença?
No PostgreSQL, ILIKE ajuda quando você quer buscar sem diferenciar maiúsculas e minúsculas.
No Oracle, normalmente usamos UPPER(…) com LIKE.
Exemplo 2: qual marca de café está mais barata?
PostgreSQL
SELECT nome, preco
FROM produtos
WHERE nome ILIKE '%café%'
ORDER BY preco ASC;
Oracle
SELECT nome, preco
FROM produtos
WHERE UPPER(nome) LIKE '%CAFÉ%'
ORDER BY preco ASC;
Aqui a lógica é simples:
“Entre os cafés cadastrados, quero ver do mais barato para o mais caro.”
Exemplo 3: qual é a média dos preços dos sabões?
PostgreSQL
SELECT AVG(preco) AS media_preco
FROM produtos
WHERE nome ILIKE '%sabão%';
Oracle
SELECT AVG(preco) AS media_preco
FROM produtos
WHERE UPPER(nome) LIKE '%SABÃO%';
Um cuidado importante com UPDATE e DELETE
Quando estiver aprendendo, adote este ritual:
Antes de atualizar
SELECT * FROM produtos WHERE id = 5;
Depois, atualize
UPDATE produtos
SET preco = 15.90
WHERE id = 5;
Antes de deletar
SELECT * FROM produtos WHERE id = 3;
Depois, delete
DELETE FROM produtos
WHERE id = 3;
Isso cria disciplina. E disciplina em banco de dados evita tragédias com gravata.
Resumo mental dos comandos
SELECT
Quero ver.
INSERT
Quero adicionar.
UPDATE
Quero corrigir ou alterar.
DELETE
Quero remover, mas com extremo cuidado.
MIN
Quero o menor valor.
MAX
Quero o maior valor.
AVG
Quero a média.
COUNT
Quero contar.
SUM
Quero somar.
ORDER BY
Quero organizar.
GROUP BY
Quero resumir por grupo.
Fechamento
Aprender SQL é aprender a fazer perguntas melhores.
Quando alguém pergunta:
- qual produto vende mais?
- qual foi o menor preço?
- quanto temos em estoque?
- qual categoria está mais cara?
- qual item deve ser ajustado?
- o que pode ser apagado?
- onde está o erro?
No fundo, essa pessoa está tentando transformar curiosidade em clareza.
E é exatamente isso que o SQL faz.
Ele ensina o iniciante a não depender só da tela. A não confiar apenas na abstração. A não ficar preso em ORM que fala bonito e explica pouco.
SQL é um dos primeiros lugares onde um desenvolvedor começa a enxergar a verdade sem maquiagem.