CodeGym /Cursos /SQL SELF /Usando WHERE para atualizar e deletar dados...

Usando WHERE para atualizar e deletar dados

SQL SELF
Nível 21 , Lição 4
Disponível

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 WHERE e todas as linhas vão ser afetadas.
  • Condição errada: se você escrever, por exemplo, age = 19 ao invés de age < 19, pode mexer nos dados errados.
  • Condições complexas: se errar a ordem dos operadores (AND e OR), 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!

1
Pesquisa/teste
Inserção e atualização de dados, nível 21, lição 4
Indisponível
Inserção e atualização de dados
Inserção e atualização de dados
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION