Torna all'elenco degli articoli Articoli
Tempo di lettura: 5 minuti

Uso di CASE con le dichiarazioni di modifica dei dati

Cosa succede quando si combina CASE con le istruzioni di modifica dei dati di SQL? Scopritelo in questo articolo.

L'espressione CASE è una parte molto utile di SQL, che verrà utilizzata spesso. Abbiamo già spiegato cosa fa l'espressione CASE, come formattarla e come usarla in un'istruzione SELECT in"Usare CASE per aggiungere logica a una SELECT". Un altro articolo,"Come ordinare i record con la clausola ORDER BY", ha mostrato come utilizzare CASE in una clausola ORDER BY.

Ma non abbiamo esaurito tutte le possibilità dell'espressione CASE. In questo post parleremo dell'uso di CASE con le istruzioni di modifica dei dati di SQL.

Cosa sono le istruzioni di modifica dei dati di SQL?

In SQL esistono tre istruzioni di modifica dei dati. Sono dette di modifica dei dati perché apportano modifiche ai dati memorizzati in una tabella del database. Queste istruzioni sono abbastanza familiari, anche per gli utenti di SQL alle prime armi. Esse sono:

  • INSERT - Aggiunge record a una tabella
  • UPDATE - Modifica i valori delle colonne della tabella
  • DELETE - Rimuove record dalla tabella

Vedremo come ognuna di queste affermazioni funziona con l'espressione CASE. Tuttavia, prima di iniziare a scrivere le query, guardiamo la tabella car mostrata di seguito. La utilizzeremo in tutti i nostri esempi:

id brand model info
1 Ford Fiesta NULL
2 Ford Mondeo NULL
3 Opel Astra NULL
4 Ford Galaxy NULL
5 Toyota Corolla NULL
6 Toyota RAV4 NULL

Come si può vedere, in questa tabella sono memorizzati i dati relativi alle automobili: il loro numero identificativo interno, la marca dell'auto, il nome del modello e un campo opzionale per ulteriori informazioni.

Inizieremo la nostra indagine sull'uso delle istruzioni di modifica dei dati con l'espressione CASE con l'istruzione INSERT.

Inserimento di record con CASE

È possibile utilizzare l'istruzione INSERT per inserire nuovi record in una tabella. Se si desidera spostare i record da una tabella a un'altra, si utilizza l'istruzione SELECT INTO.

Il primo esempio dimostrerà l'aggiunta di informazioni in una nuova tabella, tab. Questa nuova tabella verrà creata con la query. Si noti che per fare ciò si utilizza un'istruzione SELECT INTO. Ecco come funziona:

SELECT brand, model,
          CASE brand
               WHEN 'Ford' THEN 'Founder was Henry Ford'
               WHEN 'Opel' THEN 'Founder was Adam Opel'
               WHEN 'Toyota' THEN 'Founder was Kiichiro Toyoda'
                ELSE '-'
		END AS info
INTO tab
FROM car;

L'istruzione SELECT INTO inizia prendendo i dati dalle colonne brand e model della tabella e li sposta nella nuova tabella. car e li sposta nella tabella appena creata. tab creata. La terza colonna in tab è la colonna info. Il valore della colonna info dipende dal valore della colonna car.brand. Se il valore della colonna car.brand è "Ford", nella colonna tab.info verrà visualizzata la stringa "Founder was Henry Ford". Se il marchio è "Opel", verrà visualizzata la stringa "Founder was Adam Opel"; per "Toyota", verrà visualizzata la stringa "Founder was Kiichiro Toyoda". In tutti gli altri casi, il valore restituito sarà "- ".

Ecco la tabella risultante tab e il suo contenuto:

brand model info
Ford Fiesta Founder was Henry Ford
Ford Mondeo Founder was Henry Ford
Opel Astra Founder was Adam Opel
Ford Galaxy Founder was Henry Ford
Toyota Corolla Founder was Kiichiro Toyoda
Toyota RAV4 Founder was Kiichiro Toyoda

Uso di CASE con UPDATE

L'espressione CASE può essere utilizzata anche in un'istruzione UPDATE. L'istruzione UPDATE è già nota: modifica o aggiorna i valori delle colonne esistenti. Se si desidera aggiornare i record in base ai valori delle colonne, è possibile farlo con l'espressione CASE. Guardate il seguente esempio:

UPDATE car SET info =
CASE brand
          WHEN 'Ford' THEN 'Founder was Henry Ford'
          WHEN 'Toyota' THEN 'Founder was Kiichiro Toyoda'
          ELSE '-'
          END
;

Si nota che le informazioni della colonna info sono state aggiornate. Normalmente, il nuovo valore verrebbe inserito nella clausola SET. Invece, questo valore predeterminato è stato sostituito dall'espressione CASE. L'espressione CASE verifica il valore della colonna brand e lo utilizza per determinare cosa inserire nella colonna info. Se nella colonna brand viene memorizzato qualcosa di diverso da "Ford" o "Toyota", nella colonna info verrà visualizzata una stringa "-" per quel record.

Ecco la tabella car dopo l'aggiornamento:

id brand model info
1 Ford Fiesta Founder was Henry Ford
2 Ford Mondeo Founder was Henry Ford
3 Opel Astra
4 Ford Galaxy Founder was Henry Ford
5 Toyota Corolla Founder was Kiichiro Toyoda
6 Toyota RAV4 Founder was Kiichiro Toyoda

Si noti che il record di Opel Astra non contiene nulla nella colonna info. Questo perché "Opel" non è stata specificata come marca nell'espressione WHEN di CASE. È stato restituito il valore definito in ELSE.

Eliminazione dei dati con l'espressione CASE

Parliamo ora dell'ultima delle istruzioni che modificano i dati: DELETE. Viene utilizzata per rimuovere i record da una tabella. Ancora una volta, è possibile utilizzare l'espressione CASE nella clausola WHERE per controllare i risultati. Guardate questo esempio:

DELETE FROM car 
WHERE FALSE = CASE 
    WHEN info IS NOT NULL THEN TRUE
      ELSE FALSE
END
;

Questa CASE verifica se il valore della colonna info è NULL. Se non è NULL, viene restituito il valore TRUE. Se il valore è NULL, viene restituito il valore FALSE di ELSE. Se l'espressione CASE restituisce un valore FALSO, il record viene eliminato.

Di seguito vediamo la tabella car dopo che sono state eliminate le righe con valori NULL nella colonna info:

id brand model info
1 Ford Fiesta Founder was Henry Ford
2 Ford Mondeo Founder was Henry Ford
4 Ford Galaxy Founder was Henry Ford
5 Toyota Corolla Founder was Kiichiro Toyoda
6 Toyota RAV4 Founder was Kiichiro Toyoda

Per saperne di più sull'espressione SQL CASE

Se siete interessati a saperne di più sull'espressione CASE, consultate il corso Standard SQL Functions di LearnSQL. Imparerete di più su questa espressione e su altre. Inoltre, potrete mettere in pratica le vostre nuove competenze con esercizi interattivi. Provatelo oggi stesso!