Imagina que você é admin do banco de dados e precisa mudar ou deletar alguns registros. Mas e se você, sem querer, atualizar ou deletar tudo? Usar o operador WHERE é tipo seu "seguro" contra desastres. Ele deixa você dizer exatamente quais linhas vão ser afetadas quando rodar suas queries.
Por exemplo:
UPDATE students
SET status = 'Graduated';
Essa query vai atualizar
todas as linhas da tabela
students. Agora imagina que, ao invés de dar parabéns pela formatura, você colocou sem querer pra todo mundo
status = 'Expelled'. Tenso, né? Pra evitar isso, a gente sempre usa
WHERE pra definir
condições que dizem quais linhas devem ser atualizadas ou deletadas.
Sintaxe da condição WHERE
WHERE serve pra filtrar as linhas que vão ser afetadas pelo operador. Dá pra usar tanto no UPDATE quanto no DELETE. A sintaxe é assim:
Pra UPDATE:
UPDATE tabela
SET coluna1 = valor1, coluna2 = valor2
WHERE condição;
Pra DELETE:
DELETE FROM tabela
WHERE condição;
Sem o WHERE, as mudanças vão afetar todas as linhas da tabela. Então tenta sempre colocar condições pra não mudar dados que você não queria mexer.
Usando operadores de comparação
Pra montar as condições no WHERE, a gente usa operadores de comparação. Bora ver os principais:
| Operador | Descrição | Exemplo |
|---|---|---|
= |
Igual | age = 18 |
<> |
Diferente | age <> 18 |
> |
Maior que | age > 18 |
< |
Menor que | age < 18 |
>= |
Maior ou igual | age >= 18 |
<= |
Menor ou igual | age <= 18 |
Exemplo: vamos atualizar o status do estudante
Se quiser marcar todos os estudantes com mais de 21 anos como "formados", faz assim:
UPDATE students
SET status = 'Graduated'
WHERE age > 21;
Exemplo: deletar todos os estudantes menores de 18 anos
Se alguém cadastrou estudantes menores de idade sem querer, dá pra deletar eles assim:
DELETE FROM students
WHERE age < 18;
Condições complexas com operadores lógicos
Muitas vezes você vai precisar filtrar linhas por mais de um critério. Tipo, atualizar só quem tem mais de 18 anos e faz o curso de programação. Pra isso, usamos operadores lógicos: AND, OR e NOT.
Operadores lógicos:
| Operador | Descrição | Exemplo |
|---|---|---|
AND |
Rola se todas as condições forem verdadeiras | age > 18 AND course = 'Programming' |
OR |
Rola se pelo menos uma condição for verdadeira | age > 18 OR course = 'Programming' |
NOT |
Inverte o resultado da condição | NOT (age < 18) |
Exemplo: atualizar só estudantes de programação com mais de 18 anos
UPDATE students
SET status = 'Advanced'
WHERE age > 18 AND course = 'Programming';
Exemplo: deletar todos os estudantes menores de 18 anos ou quem faz o curso "Singing"
DELETE FROM students
WHERE age < 18 OR course = 'Singing';
Como evitar desastres
Sempre confere a condição antes de rodar!
Se você rodar uma query sem WHERE, o PostgreSQL vai executar em todas as linhas da tabela. Olha só:
DELETE FROM students;
-- Opa! Todas as linhas da tabela students foram deletadas!
Pra não passar por isso, coloca o WHERE:
DELETE FROM students
WHERE student_id = 123;
Dica: se não tiver certeza do efeito da condição, começa com um SELECT. Tipo assim:
SELECT * FROM students
WHERE student_id = 123;
Quando tiver certeza que a seleção tá certa, aí sim faz o UPDATE ou DELETE.
Exemplos práticos
Exemplo 1: Atualizando status dos estudantes
Imagina que temos a tabela students:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Beginner |
| 2 | Maria Chi | 22 | Mathematics | Graduated |
| 3 | Eva Gram | 19 | Programming | Beginner |
Queremos marcar todos os estudantes de programação com mais de 18 anos como "Intermediate":
UPDATE students
SET status = 'Intermediate'
WHERE age > 18 AND course = 'Programming';
Resultado:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
| 2 | Maria Chi | 22 | Mathematics | Graduated |
| 3 | Eva Gram | 19 | Programming | Beginner |
Exemplo 2: Deletando estudantes expulsos
Agora imagina que temos estudantes em cursos que precisam ser deletados. Por exemplo, quem fez o curso "History of Arts". Tabela:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
| 4 | Alex Ming | 21 | History of Arts | Expelled |
Vamos deletar os estudantes do curso "History of Arts":
DELETE FROM students
WHERE course = 'History of Arts';
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
Exemplo 3: Atualizando sem condição (e porque isso é ruim)
Se você escrever:
UPDATE students
SET status = 'Formado';
TODO MUNDO vai virar formado. Por isso, sempre use WHERE!
Imagina que a tabela era assim antes:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
| 2 | Maria Chi | 22 | Mathematics | Graduated |
| 3 | Eva Gram | 19 | Programming | Beginner |
Depois de rodar o UPDATE sem WHERE:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Formado |
| 2 | Maria Chi | 22 | Mathematics | Formado |
| 3 | Eva Gram | 19 | Programming | Formado |
😬 Viu só? Todos os status mudaram. O erro pode ser irreversível, principalmente se não tiver backup. Então WHERE é seu brother!
Pegadinhas e dicas
Mesmo o operador WHERE sendo super útil, quem tá começando costuma errar:
- Faltou condição: esqueceu o
WHEREe todas as linhas vão ser afetadas. - Condição errada: se você escrever, por exemplo,
age = 19ao invés deage < 19, pode mexer nos dados errados. - Condições complexas: se errar a ordem dos operadores (
ANDeOR), pode dar resultado estranho. Usa parênteses pra deixar claro:DELETE FROM students WHERE (age > 18 AND course = 'Programming') OR course = 'Mathematics';
Tenta sempre escrever queries de um jeito que você e a galera entendam fácil.
Agora você já sabe como usar WHERE pra atualizar e deletar dados de um jeito seguro e tranquilo. Essa ferramenta é seu melhor amigo quando mexer com banco de dados. E lembra: melhor conferir a condição duas vezes do que ter que recuperar dados depois!
GO TO FULL VERSION