0Pricing
SQL Interview Prep · Lezione

COALESCE, NULLIF e ISNULL

Sostituire i valori predefiniti e distinguere COALESCE dalle funzioni specifiche dei singoli fornitori

COALESCE, NULLIF e ISNULL è una lezione SQL Interview Prep gratuita su CoddyKit. Questa è la lezione 3 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.

Sostituire i valori NULL

Ora che sa rilevare NULL, la competenza successiva richiesta nei colloqui è sostituirlo con un valore predefinito sensato. Lo strumento portabile e standard per farlo è COALESCE.

Insieme a questo, incontrerà NULLIF, che opera nella direzione opposta trasformando un valore specifico in NULL, e le funzioni specifiche del fornitore ISNULL (SQL Server) e IFNULL (MySQL), che i candidati spesso confondono con COALESCE.

Conoscere esattamente le differenze, soprattutto per quanto riguarda il numero di argomenti e il tipo restituito, è una domanda frequente nei colloqui di selezione.

Nozioni di base su COALESCE

COALESCE accetta un numero qualsiasi di argomenti e restituisce il primo valore non NULL, esaminandoli da sinistra a destra. Se tutti gli argomenti sono NULL, restituisce NULL.

È uno standard ANSI e funziona con tutti i principali database, perciò dovrebbe essere la sua risposta predefinita. Lo utilizzi per fornire valori alternativi nella visualizzazione, nei calcoli o nei raggruppamenti.

-- Show 0 instead of NULL for missing bonuses
SELECT name, COALESCE(bonus, 0) AS bonus
FROM employees;

-- Multiple fallbacks, first non-NULL wins
SELECT COALESCE(mobile_phone, home_phone, 'no phone') AS contact
FROM customers;

COALESCE usa la valutazione short-circuit

Un dettaglio su cui gli intervistatori insistono: concettualmente, COALESCE valuta gli argomenti da sinistra a destra e si ferma al primo valore non NULL. Di conseguenza, un'espressione costosa successiva non è necessaria quando una precedente ha già prodotto un risultato.

Nella pratica, gli ottimizzatori di alcuni motori potrebbero comunque valutare le espressioni in modo eager, quindi non faccia affidamento su questo comportamento per proteggersi da errori come la divisione per zero. È però garantita la precedenza da sinistra a destra nel determinare quale valore viene scelto.

-- Prefer the manual override, else the computed value,
-- else a constant default
SELECT COALESCE(manual_price, list_price * 1.1, 9.99) AS price
FROM products;

COALESCE e il tipo di dati del risultato

Un dettaglio insidioso: il tipo di dati del risultato di COALESCE è determinato dalla precedenza dei tipi di tutti gli argomenti considerati insieme, non solo dal primo. La combinazione di tipi incompatibili può causare errori o troncamenti imprevisti.

Ad esempio, COALESCE applicato a una colonna intera e a un valore predefinito stringa potrebbe non riuscire oppure effettuare una conversione implicita, a seconda del motore. Gli intervistatori usano questo caso per verificare se presta attenzione ai tipi.

-- Risky: integer column with a string fallback
-- may error or force a cast depending on dialect
SELECT COALESCE(score, 'N/A') FROM tests;

-- Safer: keep the fallback type-compatible, or cast explicitly
SELECT COALESCE(CAST(score AS VARCHAR), 'N/A') FROM tests;

ISNULL (SQL Server) e COALESCE

SQL Server dispone di ISNULL(expr, replacement). Sembra simile a COALESCE, ma presenta differenze importanti che gli intervistatori amano mettere a confronto:

  • Numero di argomenti: ISNULL ne accetta esattamente due; COALESCE ne accetta molti.
  • Tipo restituito: ISNULL utilizza il tipo del primo argomento, quindi può troncare il valore sostitutivo. COALESCE utilizza la precedenza combinata dei tipi.
  • Portabilità: ISNULL è disponibile solo in SQL Server; COALESCE è uno standard ANSI.

La raccomandazione da esprimere a voce è: preferire COALESCE per la portabilità e una gestione prevedibile dei tipi.

-- SQL Server: ISNULL may truncate the replacement to
-- the first argument's type (e.g. CHAR(1))
SELECT ISNULL(code, 'UNKNOWN') FROM items;
-- If code is CHAR(1), 'UNKNOWN' becomes 'U'

-- COALESCE picks the wider type and keeps 'UNKNOWN'
SELECT COALESCE(code, 'UNKNOWN') FROM items;

IFNULL e NVL

Altri dialetti dispongono di abbreviazioni proprie con due argomenti:

  • MySQL / SQLite: IFNULL(expr, replacement)
  • Oracle: NVL(expr, replacement), oltre a NVL2 per una variante then/else

Tutte e tre funzionano come una versione di COALESCE con due argomenti. Se le viene chiesto esplicitamente l'idioma di MySQL o Oracle, nomini queste funzioni; altrimenti scelga COALESCE.

-- MySQL
SELECT IFNULL(bonus, 0) FROM employees;

-- Oracle
SELECT NVL(bonus, 0) FROM employees;
-- NVL2(bonus, 'has bonus', 'no bonus') -> if/else on NULL

NULLIF: la direzione opposta

NULLIF(a, b) restituisce NULL quando a = b; altrimenti restituisce a. Crea deliberatamente un valore NULL, quindi opera nella direzione opposta rispetto a COALESCE.

Il suo utilizzo più noto è la protezione dalla divisione per zero. Racchiuda il denominatore in NULLIF(denominator, 0): se vale zero, il divisore diventa NULL e l'intera divisione restituisce NULL invece di generare un errore.

-- Avoid divide-by-zero: returns NULL instead of erroring
SELECT revenue / NULLIF(orders, 0) AS avg_order_value
FROM daily_stats;

-- NULLIF(5, 5) -> NULL
-- NULLIF(5, 3) -> 5

Combinare NULLIF e COALESCE

Le due funzioni si combinano alla perfezione. Una formula classica da colloquio è la «divisione sicura che mostra 0 quando non ci sono ordini». Utilizzi NULLIF per evitare l'errore, poi COALESCE per sostituire il NULL risultante.

Questa espressione compatta dimostra padronanza: gestisce il caso limite e la presentazione del risultato in un'unica espressione.

SELECT
  COALESCE(revenue / NULLIF(orders, 0), 0) AS avg_order_value
FROM daily_stats;

-- orders = 0 -> NULLIF gives NULL -> division gives NULL
-- -> COALESCE turns it into 0

Trattare le stringhe vuote come NULL

Un altro utilizzo pratico di NULLIF è trasformare le stringhe vuote in NULL, così da poterle gestire uniformemente con COALESCE. I dati non puliti spesso mescolano NULL e ''; questa tecnica li normalizza entrambi.

Il modello si può leggere così: «se il valore è vuoto, trasformalo in NULL, poi usa un valore predefinito». È una risposta pulita e portabile alla domanda «come tratta allo stesso modo i valori vuoti e quelli mancanti?»

-- Treat both '' and NULL as missing, default to 'Anonymous'
SELECT COALESCE(NULLIF(TRIM(username), ''), 'Anonymous')
FROM users;

Esempio più approfondito: sostituire i NULL nei JOIN

Dopo un LEFT JOIN, le righe senza corrispondenza producono NULL sul lato destro. COALESCE trasforma questi valori in predefiniti significativi nell'output, un requisito molto comune nei report.

In questo caso, i clienti senza ordini continuano a essere inclusi grazie a LEFT JOIN e il loro totale viene mostrato come 0 invece che come NULL. Menzionare che COALESCE viene applicato dopo il join, non al suo interno, dimostra di comprendere l'ordine di valutazione.

SELECT
  c.name,
  COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Customers with no orders get 0 instead of NULL

Punti chiave per il colloquio

Riepilogo degli strumenti per la sostituzione:

  • COALESCE(a, b, ...): restituisce il primo valore non NULL, accetta più argomenti, è uno standard ANSI e determina il tipo in base alla precedenza. È la scelta predefinita.
  • ISNULL / IFNULL / NVL: abbreviazioni specifiche del fornitore con due argomenti; ISNULL può troncare il risultato al tipo del primo argomento.
  • NULLIF(a, b): restituisce NULL quando i valori sono uguali; è ottimo per proteggersi dalla divisione per zero e normalizzare le stringhe vuote.
  • Combini COALESCE(x / NULLIF(y, 0), 0) per ottenere una divisione sicura e un risultato presentabile.

Inizi da COALESCE e menzioni le varianti specifiche del fornitore solo quando il dialetto è definito.

Verifica rapida

Scelga l'espressione per una divisione sicura.

Riepilogo

Ora sa sostituire e creare valori NULL:

  • COALESCE restituisce il primo valore non NULL tra molti argomenti; è la scelta portabile predefinita.
  • ISNULL (SQL Server), IFNULL (MySQL) e NVL (Oracle) sono abbreviazioni con due argomenti; ISNULL può troncare il risultato al tipo del primo argomento.
  • NULLIF(a, b) restituisce NULL quando i due valori sono uguali; è ideale per proteggersi dalla divisione per zero e normalizzare le stringhe vuote.
  • Le combini per ottenere espressioni sicure e presentabili e per sostituire i NULL prodotti dopo un LEFT JOIN.

Lezione finale: come si comporta NULL nelle aggregazioni, nei join e con DISTINCT.

Domande Frequenti

La lezione «COALESCE, NULLIF e ISNULL» è gratuita?

Sì — il testo completo di «COALESCE, NULLIF e ISNULL» è 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 «COALESCE, NULLIF e ISNULL»?

Sostituire i valori predefiniti e distinguere COALESCE dalle funzioni specifiche dei singoli fornitori 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 3 di 4.

Quanto tempo richiede la lezione «COALESCE, NULLIF e ISNULL»?

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

  1. Logica a tre valori e UNKNOWN
  2. IS NULL, IS NOT NULL ed eguaglianza NULL-safe
  3. COALESCE, NULLIF e ISNULL
  4. NULL in aggregati, join e DISTINCT
← Torna a SQL Interview Prep