Modificare i dati in SQL

Nella lezione precedente abbiamo visto come utilizzare INSERT per inserire nuove righe nelle tabelle. Ora vediamo come modificare dati già presenti utilizzando l'istruzione UPDATE.

UPDATE permette di modificare una o più colonne di una o più righe, eventualmente utilizzando condizioni per stabilire quali record devono essere aggiornati.

Modificare i dati con UPDATE

UPDATE permette di aggiornare i dati di una tabella.

La sintassi base è: UPDATE tabella SET colonna = valore WHERE condizione;.

Vediamo un esempio:

UPDATE utenti SET nome = 'Andrea' WHERE id = 1;

In questo esempio, aggiorniamo il nome dell'utente con id uguale a 1.

Modificare più colonne

Possiamo modificare più colonne con la stessa istruzione UPDATE. In SET possiamo specificare i nuovi valori da assegnare alle colonne, separando ogni assegnazione con una virgola.

Ad esempio, per modificare sia nome che email della riga con id uguale a 1:

UPDATE utenti
SET nome = 'Andrea',
    email = '[email protected]'
WHERE id = 1;

Modificare più righe

La condizione presente in WHERE non deve necessariamente identificare una sola riga. Possiamo infatti modificare tutte le righe che soddisfano la condizione specificata nella query.

Ad esempio, possiamo usare degli operatori come IN:

UPDATE utenti
SET attivo = FALSE
WHERE id IN (2, 3);

In questo esempio, verranno aggiornati tutti gli utenti il cui id è 2 oppure 3.

Se non viene specificato WHERE, l'aggiornamento dei dati verrà effettuato per tutte le righe della tabella:

UPDATE utenti
SET attivo = FALSE;

Utilizzare espressioni in SET

Il valore assegnato a una colonna non deve essere necessariamente un valore fisso: possiamo utilizzare anche delle espressioni SQL.

Per esempio, se abbiamo una colonna tentativi:

UPDATE utenti
SET tentativi = tentativi + 1
WHERE id = 1;

In questo caso il valore attuale viene incrementato di 1. Per esempio, se tentativi valeva inizialmente 3, dopo l'aggiornamento varrà 4.

Possiamo utilizzare anche altre operazioni:

UPDATE prodotti
SET prezzo = prezzo * 1.10
WHERE categoria = 'Elettronica';

In questo caso aumentiamo del 10% il prezzo dei prodotti appartenenti alla categoria indicata.

Utilizzare funzioni in SET

In SET possiamo utilizzare anche le funzioni sulle stringhe e le funzioni sui numeri che abbiamo visto nelle lezioni precedenti.

Ad esempio, per rendere i nomi degli utenti attivi in maiuscolo:

UPDATE utenti
SET nome = UPPER(nome)
WHERE attivo = TRUE;

Possiamo utilizzare anche funzioni sulle date:

UPDATE utenti
SET data_scadenza = DATE_ADD(data_scadenza, INTERVAL 30 DAY)
WHERE attivo = TRUE;

In questo caso aggiungiamo 30 giorni alla data di scadenza degli utenti attivi.

Utilizzare CASE in UPDATE

Possiamo utilizzare CASE, che abbiamo visto nella lezione sulla logica condizionale nelle query, per applicare valori diversi in base a determinate condizioni.

Ad esempio:

UPDATE utenti
SET stato = CASE
    WHEN ultima_attivita >= '2026-08-01' THEN 'attivo'
    WHEN ultima_attivita >= '2026-01-01' THEN 'inattivo'
    ELSE 'archiviato'
END;

In questo caso lo stato viene determinato in base alla data dell'ultima attività.

Aggiornare dati utilizzando un'altra tabella

In alcuni casi il valore da assegnare a una colonna dipende da dati presenti in un'altra tabella. MySQL permette di effettuare questi aggiornamenti utilizzando JOIN, già visto nella lezione sull'integrità referenziale.

Supponiamo, ad esempio, di avere due tabelle:

  • prodotti, con colonne id, nome e prezzo.
  • prezzi_aggiornati, con colonne prodotto_id e nuovo_prezzo.

Possiamo aggiornare i prezzi della tabella prodotti utilizzando quelli presenti in prezzi_aggiornati:

UPDATE prodotti AS p
JOIN prezzi_aggiornati AS pa
    ON p.id = pa.prodotto_id
SET p.prezzo = pa.nuovo_prezzo;

MySQL cerca le righe corrispondenti tra le due tabelle e aggiorna p.prezzo utilizzando il valore di pa.nuovo_prezzo.

Prova!Completa gli spazi vuoti con il testo appropriato.
-- Aumenta del 5% lo stipendio dei dipendenti del reparto Vendite
UPDATE dipendenti
stipendio = stipendio * 1.05
WHERE reparto = 'Vendite';

Prova! Scegli l'opzione corretta tra quelle elencate.
-- Aggiorna lo sconto dei clienti in base al totale speso
UPDATE clienti
SET sconto = ____
    WHEN totale_speso >= 1000 THEN 0.20
    WHEN totale_speso >= 500 THEN 0.10
    ELSE 0
END;