Istruzione SQL CASE: logica condizionale nelle tue query
Published: 2026-02-11
L’istruzione CASE è il modo in cui SQL aggiunge logica condizionale alle tue query. Funziona come un’istruzione if-then-else, permettendoti di restituire valori diversi in base alle condizioni. CASE è supportata in tutti i principali database SQL, inclusi SQLite, PostgreSQL, MySQL, SQL Server e Oracle.
Dati di esempio
Utilizziamo due tabelle in tutti gli esempi:
Tabella products:
| id | name | category | price | stock | rating |
|---|---|---|---|---|---|
| 1 | Laptop Pro | Electronics | 1299.99 | 15 | 4.5 |
| 2 | Wireless Mouse | Electronics | 29.99 | 50 | 4.2 |
| 3 | Office Chair | Furniture | 249.99 | 8 | 4.7 |
| 4 | Desk Lamp | Furniture | 39.99 | 25 | 3.9 |
| 5 | Notebook Pack | Stationery | 12.99 | 100 | 4.0 |
| 6 | Pen Set | Stationery | 8.99 | 75 | 3.5 |
| 7 | Monitor 27" | Electronics | 399.99 | 0 | 4.6 |
| 8 | Standing Desk | Furniture | 599.99 | 3 | 4.8 |
Tabella orders:
| id | product_id | quantity | order_date | status |
|---|---|---|---|---|
| 1 | 1 | 2 | 2026-02-01 | delivered |
| 2 | 2 | 5 | 2026-02-03 | shipped |
| 3 | 3 | 1 | 2026-02-05 | processing |
| 4 | 4 | 3 | 2026-02-06 | delivered |
| 5 | 5 | 10 | 2026-02-07 | shipped |
| 6 | 1 | 1 | 2026-02-08 | cancelled |
| 7 | 7 | 1 | 2026-02-09 | pending |
| 8 | 8 | 1 | 2026-02-10 | processing |
Espressione CASE semplice
L’espressione CASE semplice confronta una colonna o un’espressione con valori specifici. È concisa quando si controlla l’uguaglianza.
Sintassi
CASE column_name
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
Esempio: categorizzare lo stato degli ordini
Traduci i codici di stato degli ordini in etichette leggibili per l’utente:
Espressione CASE ricercata
L’espressione CASE ricercata valuta condizioni booleane, consentendo confronti complessi e intervalli.
Sintassi
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END
Esempio: categorie di prezzo
Classifica i prodotti per fascia di prezzo:
Esempio: stato della disponibilità in magazzino
Determina lo stato dell’inventario con soglie diverse:
Utilizzo di CASE nei calcoli
Le istruzioni CASE possono modificare i calcoli, applicare formule condizionali o gestire valori NULL.
Esempio: applicare sconti in base alla categoria
Calcola gli sconti in base alla categoria del prodotto:
Esempio: priorità degli ordini in base a valore e stato
Calcola la priorità degli ordini in base a più fattori:
CASE nelle aggregazioni
Usa CASE all’interno delle funzioni di aggregazione per creare report simili a pivot o conteggi condizionali.
Esempio: conteggio dei prodotti per disponibilità
Conta quanti prodotti rientrano in ciascuna categoria di stock:
Esempio: ricavi per categoria e stato
Calcola metriche diverse usando aggregazioni condizionali:
CASE in ORDER BY
Usa CASE in ORDER BY per creare logiche di ordinamento personalizzate.
Esempio: ordine di ordinamento personalizzato
Ordina i prodotti con priorità personalizzata (esauriti per primi, poi per valutazione):
Istruzioni CASE annidate
Le espressioni CASE possono essere annidate per una logica più complessa.
Esempio: classificazione complessa dei prodotti
Combina più criteri per una categorizzazione dettagliata:
Casi d’uso comuni per le istruzioni CASE
- Categorizzazione dei dati — Raggruppa i valori in intervalli o categorie
- Formattazione condizionale — Mostra etichette o indicatori di stato leggibili
- Calcoli dinamici — Applica formule diverse in base alle condizioni
- Creazione di tabelle pivot — Combina con aggregazioni per report a doppia entrata
- Ordinamento personalizzato — Definisci ordini di ordinamento specifici per logiche di business particolari
- Gestione dei valori NULL — Sostituisci o evidenzia i dati mancanti
- Decisioni multi-criterio — Implementa regole di business complesse in SQL
CASE vs. IIF e COALESCE
- CASE — Il più flessibile, gestisce condizioni multiple
- IIF(condition, true_value, false_value) — Sintassi più semplice per una singola condizione (SQL Server, Access)
- COALESCE(val1, val2, …) — Restituisce il primo valore non NULL (utile per la gestione dei NULL)
SQLite supporta sia CASE che COALESCE, ma non IIF. Usa CASE per la massima compatibilità.
Suggerimenti sulle prestazioni
- Ordina le condizioni con criterio — Metti per prime le condizioni più probabili
- Evita valutazioni ridondanti — CASE viene valutato in sequenza; una volta che una condizione corrisponde, si ferma
- Indicizza le colonne appropriate — Se CASE utilizza confronti su colonne, gli indici possono aiutare
- Valuta colonne calcolate — Per logiche CASE usate frequentemente, alcuni database supportano colonne calcolate indicizzate
Riepilogo
CASEaggiunge logica condizionale alle query SQL con un comportamento if-then-else- CASE semplice confronta una colonna con valori specifici:
CASE column WHEN value THEN result - CASE ricercato valuta condizioni booleane:
CASE WHEN condition THEN result - Può essere usato in SELECT, WHERE, ORDER BY e nelle funzioni di aggregazione
- Le espressioni CASE possono essere annidate per alberi decisionali complessi
- Includi sempre una clausola ELSE per gestire valori imprevisti
- Supportato in tutti i principali database SQL con sintassi coerente
Prova a modificare gli esempi per sperimentare condizioni diverse e vedere come CASE può semplificare la tua logica condizionale!