0Pricing
SQL Academy · Lezione

CASE semplice e con ricerca

Due modi di scrivere CASE

CASE semplice e con ricerca è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 2 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 Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Due modi di scrivere CASE

SQL offre due varianti dell'espressione CASE: il CASE semplice e il CASE ricercato. Entrambi restituiscono un valore in base a condizioni, ma differiscono nel modo in cui tali condizioni vengono scritte.

Al termine di questa lezione saprà quando scegliere ciascuna forma e come evitare gli errori più comuni dovuti alla loro confusione.

CASE semplice — l'idea

Un CASE semplice confronta un'espressione con un elenco di valori. Lo si può considerare come una tabella di ricerca: si sceglie una colonna o un valore a sinistra, quindi si elenca a quale valore deve essere uguale in ciascun ramo WHEN.

Sintassi: CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END

SELECT
  product_name,
  category_id,
  CASE category_id
    WHEN 1 THEN 'Electronics'
    WHEN 2 THEN 'Clothing'
    WHEN 3 THEN 'Books'
    ELSE 'Other'
  END AS category_name
FROM products;

CASE semplice nella pratica

Qui l'espressione CASE si trova subito dopo la parola chiave e la colonna status viene confrontata per uguaglianza con ciascun valore WHEN. Noti che nei rami WHEN non deve scrivere status =: il confronto è implicito.

SELECT
  order_id,
  status,
  CASE status
    WHEN 'pending'   THEN 'Awaiting payment'
    WHEN 'paid'      THEN 'Payment received'
    WHEN 'shipped'   THEN 'On its way'
    WHEN 'delivered' THEN 'Completed'
    ELSE 'Unknown status'
  END AS status_label
FROM orders;

CASE ricercato — l'idea

Un CASE ricercato non presenta alcuna espressione subito dopo la parola chiave CASE. Al contrario, ogni ramo WHEN contiene una condizione booleana completa. Questo lo rende molto più flessibile: può combinare colonne diverse, usare controlli su intervalli o chiamare funzioni all'interno di ogni WHEN.

Sintassi: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END

SELECT
  employee_name,
  salary,
  CASE
    WHEN salary < 30000  THEN 'Entry Level'
    WHEN salary < 60000  THEN 'Mid Level'
    WHEN salary < 100000 THEN 'Senior'
    ELSE 'Executive'
  END AS salary_band
FROM employees;

CASE ricercato nella pratica

Poiché ogni WHEN accetta una qualsiasi espressione booleana, può combinare più colonne in un singolo ramo. Il database valuta le clausole WHEN dall'alto verso il basso e restituisce il risultato del primo ramo la cui condizione è TRUE.

SELECT
  product_name,
  stock,
  price,
  CASE
    WHEN stock = 0              THEN 'Out of stock'
    WHEN stock < 10 AND price > 100 THEN 'Low stock — premium item'
    WHEN stock < 10             THEN 'Low stock'
    ELSE 'In stock'
  END AS availability
FROM products;

Differenza strutturale fondamentale

La tabella seguente riassume la distinzione fondamentale:

CASE semplice — un'espressione dopo CASE; ogni WHEN verifica l'uguaglianza con tale espressione.
CASE ricercato — nessuna espressione dopo CASE; ogni WHEN è una condizione booleana autonoma.

Poiché il CASE semplice esegue solo confronti di uguaglianza, non può gestire intervalli, valori NULL o condizioni su più colonne. Per tutto ciò che va oltre una corrispondenza diretta di valori, usi il CASE ricercato.

-- Simple CASE: equality only
SELECT CASE day_number
         WHEN 1 THEN 'Monday'
         WHEN 2 THEN 'Tuesday'
         ELSE 'Other'
       END AS day_name
FROM schedule;

-- Searched CASE: any condition
SELECT CASE
         WHEN day_number BETWEEN 1 AND 5 THEN 'Weekday'
         WHEN day_number IN (6, 7)        THEN 'Weekend'
       END AS day_type
FROM schedule;

Gestione di NULL — perché il CASE ricercato è la scelta migliore

Un CASE semplice usa internamente = e, in SQL, NULL = NULL non è mai TRUE. Pertanto un CASE semplice non può trovare una corrispondenza per una colonna NULL. Un CASE ricercato consente di scrivere WHEN column IS NULL THEN ..., che funziona correttamente.

-- Simple CASE: NULL branch never matches
SELECT CASE manager_id
         WHEN NULL THEN 'No manager'   -- this will NEVER fire
         ELSE 'Has manager'
       END
FROM employees;

-- Searched CASE: correct NULL check
SELECT CASE
         WHEN manager_id IS NULL THEN 'No manager'
         ELSE 'Has manager'
       END AS manager_status
FROM employees;

Combinare colonne nel CASE ricercato

Un importante punto di forza del CASE ricercato è che ogni ramo WHEN può fare riferimento a colonne completamente diverse o chiamare funzioni. In questo modo può esprimere regole di business complesse che un CASE semplice non è in grado di gestire.

SELECT
  customer_name,
  total_orders,
  total_spent,
  CASE
    WHEN total_spent > 10000 AND total_orders > 20 THEN 'VIP'
    WHEN total_spent > 5000                        THEN 'Gold'
    WHEN total_orders > 10                         THEN 'Silver'
    ELSE 'Standard'
  END AS tier
FROM customers;

Usare CASE in ORDER BY

Entrambe le forme di CASE possono comparire all'interno di ORDER BY per creare un ordine di ordinamento personalizzato che non esiste nei dati. Qui un CASE semplice associa i nomi delle priorità a numeri, così le righe vengono ordinate secondo la priorità aziendale anziché in ordine alfabetico.

SELECT ticket_id, subject, priority
FROM support_tickets
ORDER BY
  CASE priority
    WHEN 'critical' THEN 1
    WHEN 'high'     THEN 2
    WHEN 'medium'   THEN 3
    WHEN 'low'      THEN 4
    ELSE 5
  END ASC;

CASE all'interno delle funzioni di aggregazione

Racchiudere un CASE ricercato in SUM o COUNT è un modello classico per l'aggregazione condizionale, talvolta chiamata pivot. Consente di produrre i totali di più categorie in una sola scansione invece di eseguire diverse query.

SELECT
  department,
  COUNT(*) AS total_employees,
  SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count,
  SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,
  SUM(CASE WHEN salary > 70000 THEN salary ELSE 0 END) AS high_earner_payroll
FROM employees
GROUP BY department;

Scegliere la forma corretta

Una regola pratica:

Usi il CASE semplice quando associa una singola colonna a un insieme fisso di valori noti: è più breve e più facile da leggere.
Usi il CASE ricercato in tutti gli altri casi: intervalli, controlli su NULL, logica su più colonne o chiamate a funzioni all'interno delle condizioni.

In caso di dubbio, il CASE ricercato funziona sempre. Può persino riscrivere qualsiasi CASE semplice come CASE ricercato, ma non il contrario.

-- These two queries return identical results

-- Simple CASE (concise for equality)
SELECT CASE region_code
         WHEN 'US' THEN 'United States'
         WHEN 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

-- Equivalent Searched CASE
SELECT CASE
         WHEN region_code = 'US' THEN 'United States'
         WHEN region_code = 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

Verifica rapida

Verifichi la sua comprensione del CASE semplice e del CASE ricercato.

Riepilogo della lezione

Ecco che cosa ha appreso in questa lezione:

CASE semplice — inserisce un'espressione dopo CASE; ogni WHEN verifica se tale espressione è uguale a un valore specifico. È ideale per associare una singola colonna a un elenco fisso di etichette.

CASE ricercato — non presenta alcuna espressione dopo CASE; ogni WHEN contiene una condizione booleana completa. Supporta intervalli, controlli su NULL, logica su più colonne e chiamate a funzioni.

Entrambe le forme valutano i rami dall'alto verso il basso e restituiscono il risultato del primo ramo TRUE. Quando nessun ramo corrisponde e non è presente ELSE, il risultato è NULL. Per la massima flessibilità, il CASE ricercato è sempre la scelta più sicura: può fare tutto ciò che fa il CASE semplice e anche di più.

Domande Frequenti

La lezione «CASE semplice e con ricerca» è gratuita?

Sì — il testo completo di «CASE semplice e con ricerca» è 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 Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «CASE semplice e con ricerca»?

Due modi di scrivere CASE Eserciti SQL Academy 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 Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «CASE semplice e con ricerca»?

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 Academy?

Sì. Ogni lezione SQL Academy 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

  1. L'espressione CASE
  2. CASE semplice e con ricerca
  3. Raggruppare ed etichettare i dati
  4. CASE in ORDER BY e negli aggregati
← Torna a SQL Academy