CodeGym /Corsi /SQL SELF /Uso di WHERE per aggiornare e cancellare i ...

Uso di WHERE per aggiornare e cancellare i dati

SQL SELF
Livello 21 , Lezione 4
Disponibile

Immagina di essere un admin di database e devi modificare o cancellare dei record. Ma che succede se per sbaglio aggiorni o cancelli tutto? Usare l'operatore WHERE è la tua "assicurazione" contro disastri. Ti permette di specificare esattamente quali righe vuoi toccare quando esegui le query.

Per esempio:

UPDATE students
SET status = 'Graduato';
Questa query aggiornerà tutte le righe della tabella students. E immagina se invece di congratularti per la laurea, per sbaglio imposti a tutti status = 'Espulso'. Un bel rischio, vero? Per evitarlo, usiamo sempre WHERE per specificare le condizioni che determinano quali righe devono essere aggiornate o cancellate.

Sintassi della condizione WHERE

WHERE si usa per filtrare le righe a cui si applica l'operatore. Puoi usarlo con UPDATE o DELETE. La sintassi è così:

Per UPDATE:

UPDATE tabella
SET column1 = value1, column2 = value2
WHERE condizione;

Per DELETE:

DELETE FROM tabella
WHERE condizione;

Senza WHERE le modifiche toccheranno tutte le righe della tabella. Quindi cerca sempre di mettere le condizioni, così eviti di cambiare dati che non volevi toccare.

Uso degli operatori di confronto

Per costruire le condizioni in WHERE si usano gli operatori di confronto. Vediamo i principali:

Operatore Descrizione Esempio
= Uguale age = 18
<> Diverso age <> 18
> Maggiore age > 18
< Minore age < 18
>= Maggiore o uguale age >= 18
<= Minore o uguale age <= 18

Esempio: aggiorniamo lo status dello studente

Se vuoi segnare tutti gli studenti con più di 21 anni come "laureati", fai così:

UPDATE students
SET status = 'Graduato'
WHERE age > 21;

Esempio: cancelliamo tutti gli studenti sotto i 18 anni

Se qualcuno ha inserito per sbaglio studenti minorenni, possiamo cancellarli così:

DELETE FROM students
WHERE age < 18;

Condizioni complesse con operatori logici

Spesso serve filtrare le righe con più criteri. Per esempio, vuoi aggiornare solo gli studenti che hanno più di 18 anni e studiano "Programming". Per questo si usano gli operatori logici: AND, OR e NOT.

Operatori logici:

Operatore Descrizione Esempio
AND Funziona se tutte le condizioni sono vere age > 18 AND course = 'Programming'
OR Funziona se almeno una condizione è vera age > 18 OR course = 'Programming'
NOT Negazione (inverte il risultato della condizione) NOT (age < 18)

Esempio: aggiorniamo solo gli studenti programmatori sopra i 18 anni

UPDATE students
SET status = 'Avanzato'
WHERE age > 18 AND course = 'Programming';

Esempio: cancelliamo tutti gli studenti sotto i 18 anni o chi studia "Canto"

DELETE FROM students
WHERE age < 18 OR course = 'Canto';

Come evitare errori catastrofici

Controlla sempre la condizione prima di eseguire!

Se scrivi una query senza WHERE, PostgreSQL la eseguirà su tutte le righe della tabella. Ecco cosa succede:

DELETE FROM students;
-- Ops! Tutti i record nella tabella students sono stati cancellati!

Per evitare queste situazioni, aggiungi WHERE:

DELETE FROM students
WHERE student_id = 123;

Consiglio: se non sei sicuro dell'effetto della condizione, inizia con SELECT. Per esempio:

SELECT * FROM students
WHERE student_id = 123;

Quando sei sicuro che la selezione è giusta, esegui UPDATE o DELETE.

Esempi pratici

Esempio 1: Aggiornamento degli status degli studenti

Supponiamo di avere una tabella students:

student_id name age course status
1 Otto Lin 20 Programming Beginner
2 Maria Chi 22 Mathematics Graduato
3 Eva Gram 19 Programming Beginner

Vogliamo segnare tutti gli studenti programmatori sopra i 18 anni come "Intermedio":

UPDATE students
SET status = 'Intermedio'
WHERE age > 18 AND course = 'Programming';

Risultato:

student_id name age course status
1 Otto Lin 20 Programming Intermedio
2 Maria Chi 22 Mathematics Graduato
3 Eva Gram 19 Programming Beginner

Esempio 2: Cancellazione degli studenti espulsi

Ora immaginiamo di avere studenti con corsi che vogliamo cancellare. Per esempio, studenti che hanno seguito il corso "Storia dell'arte". Tabella:

student_id name age course status
1 Otto Lin 20 Programming Intermedio
4 Alex Ming 21 Storia dell'arte Espulso

Cancelliamo gli studenti del corso "Storia dell'arte":

DELETE FROM students
WHERE course = 'Storia dell\'arte';
student_id name age course status
1 Otto Lin 20 Programming Intermedio

Esempio 3: Aggiornamento senza condizioni (e perché è male)

Se scrivi:

UPDATE students
SET status = 'Laureato';

TUTTI gli studenti diventeranno laureati. Quindi è davvero consigliato usare sempre WHERE!

Supponiamo che la tabella fosse così all'inizio:

student_id name age course status
1 Otto Lin 20 Programming Intermedio
2 Maria Chi 22 Mathematics Graduato
3 Eva Gram 19 Programming Beginner

Dopo aver eseguito UPDATE senza WHERE:

student_id name age course status
1 Otto Lin 20 Programming Laureato
2 Maria Chi 22 Mathematics Laureato
3 Eva Gram 19 Programming Laureato

😬 Vedi? Tutti gli status sono cambiati. L'errore può essere irreversibile, soprattutto senza backup. Quindi WHERE è il tuo amico!

Particolarità e trappole

Anche se l'operatore WHERE è super utile, chi inizia spesso fa errori:

  • Manca la condizione: dimentichi WHERE e tutte le righe vengono toccate.
  • Condizione sbagliata: se scrivi, per esempio, age = 19 invece di age < 19, puoi cambiare i dati sbagliati.
  • Condizioni complesse: priorità sbagliate (AND e OR) possono portare a risultati strani. Usa le parentesi per chiarezza:
    DELETE FROM students
    WHERE (age > 18 AND course = 'Programming') OR course = 'Mathematics';
    

Cerca di scrivere query che siano chiare per te e per i tuoi colleghi.

Ora sai come usare WHERE per aggiornare e cancellare dati in modo sicuro e affidabile. Questo strumento è il tuo migliore amico quando lavori con i database. E ricorda: meglio controllare la condizione due volte che dover recuperare i dati dopo!

1
Sondaggio/quiz
Inserimento e aggiornamento dei dati, livello 21, lezione 4
Non disponibile
Inserimento e aggiornamento dei dati
Inserimento e aggiornamento dei dati
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION