Espressioni CASE in SELECT
Scrivere logica condizionale inline e distinguere le forme CASE searched e simple
Espressioni CASE in SELECT è una lezione SQL Interview Prep gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Interview Prep include 4 lezioni in totale.
CASE: l'espressione condizionale di SQL
CASE è l'equivalente di if/then/else in SQL, ma è un'espressione che restituisce un valore; per questo funziona ovunque sia possibile usare un valore: SELECT, WHERE, ORDER BY e persino all'interno delle aggregazioni.
SELECT order_id,
amount,
CASE WHEN amount > 100 THEN 'large' ELSE 'small' END AS size
FROM orders;Forma CASE con condizioni
Il CASE con condizioni searched verifica una condizione booleana per ogni WHEN e restituisce il primo risultato corrispondente. È la forma più flessibile e l'ordine è importante: vince la prima condizione vera.
SELECT score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'F'
END AS grade
FROM exam_results;Forma CASE semplice
Il CASE simple confronta un'unica espressione con un elenco di valori. È più breve per i confronti di uguaglianza, ma non può gestire intervalli o verifiche su NULL.
SELECT status_code,
CASE status_code
WHEN 1 THEN 'active'
WHEN 2 THEN 'paused'
WHEN 3 THEN 'closed'
ELSE 'unknown'
END AS status_label
FROM accounts;CASE con condizioni e CASE semplice: quando usare ciascuno
Utilizzi il simple CASE per confrontare l'uguaglianza con valori fissi e il CASE con condizioni per intervalli o NULL. Insidia fondamentale: il simple CASE non può mai trovare una corrispondenza con NULL; utilizzi IS NULL in una forma con condizioni.
-- Simple CASE will NOT catch NULL here
SELECT CASE WHEN bonus IS NULL THEN 'no bonus'
ELSE 'has bonus'
END AS bonus_flag
FROM employees;L'ordine dei rami WHEN è importante
Poiché vince il primo ramo corrispondente, ordini i WHEN dal più specifico al meno specifico. Se inserisce per primo una soglia generica, un punteggio di 95 potrebbe ricevere un'etichetta errata.
-- Correct order: highest threshold first
SELECT CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C or below'
END AS grade
FROM exam_results;ELSE e il NULL implicito
Se nessuna condizione corrisponde e si omette ELSE, CASE restituisce NULL. Aggiunga un ELSE esplicito per il valore predefinito, così i valori imprevisti non diventano silenziosamente NULL.
-- No ELSE: anything not 1/2 becomes NULL
SELECT CASE flag WHEN 1 THEN 'yes' WHEN 2 THEN 'no' END AS label
FROM toggles;Aggregazione condizionale (modello pivot)
Il trucco più utile nei colloqui è l'aggregazione condizionale. Inserisca CASE dentro SUM o COUNT per contare le righe di ogni categoria in un'unica passata: un report ordinato in stile pivot.
SELECT
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid_orders,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_orders,
SUM(CASE WHEN status = 'paid' THEN amount ELSE 0 END) AS paid_revenue
FROM orders;COUNT ignora NULL: una scorciatoia con CASE
Poiché COUNT ignora i NULL, può omettere ELSE: le righe che non corrispondono diventano NULL e non vengono conteggiate. È un modo leggermente più breve per eseguire un conteggio condizionale.
SELECT
COUNT(CASE WHEN status = 'paid' THEN 1 END) AS paid_orders,
COUNT(CASE WHEN status = 'pending' THEN 1 END) AS pending_orders
FROM orders;CASE in ORDER BY per un ordinamento personalizzato
Inserisca CASE in ORDER BY per ordinare in base a una priorità personalizzata invece che in semplice ordine alfabetico o numerico, ad esempio con gli elementi urgenti prima di quelli normali e di tutti gli altri.
SELECT order_id, status
FROM orders
ORDER BY
CASE status
WHEN 'urgent' THEN 1
WHEN 'normal' THEN 2
ELSE 3
END,
order_id;Coerenza dei tipi tra i rami
Tutti i rami di un CASE devono restituire un tipo compatibile. Mescolare un numero e una stringa può causare un errore o forzare una conversione: scelga un unico tipo di output e utilizzi CAST in modo esplicito, se necessario.
-- Keep branches the same type
SELECT CASE WHEN qty > 0 THEN CAST(qty AS VARCHAR)
ELSE 'none'
END AS qty_label
FROM inventory;CASE in WHERE per il filtraggio condizionale
CASE in WHERE consente di applicare logiche di filtro diverse in base a un flag, ad esempio una soglia di prezzo diversa per ogni regione. Spesso è più chiaro di un intreccio di AND e OR.
SELECT order_id, amount, region
FROM orders
WHERE amount > CASE region
WHEN 'US' THEN 100
WHEN 'EU' THEN 90
ELSE 50
END;Verifica rapida
Preveda il risultato.
Riepilogo
Riepilogo: CASE restituisce un valore e funziona in SELECT, WHERE, ORDER BY e nelle aggregazioni. La forma con condizioni gestisce intervalli e NULL; vince la prima corrispondenza; nessuna corrispondenza significa NULL; i tipi dei rami devono essere compatibili.
Domande Frequenti
La lezione «Espressioni CASE in SELECT» è gratuita?
Sì — il testo completo di «Espressioni CASE in SELECT» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Interview Prep, passa a CoddyKit PRO. Il corso SQL Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Espressioni CASE in SELECT»?
Scrivere logica condizionale inline e distinguere le forme CASE searched e simple Eserciti SQL Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Interview Prep?
Non è richiesta alcuna esperienza precedente. SQL Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Espressioni CASE in SELECT»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Interview Prep?
Sì. Ogni lezione SQL Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Proiezione delle colonne e insidie degli alias
- Colonne calcolate e precedenza delle espressioni
- DISTINCT e GROUP BY per l'unicità
- Espressioni CASE in SELECT