0Pricing
SQL Academy · Lezione

COALESCE e NULLIF

Fornisca valori predefiniti ed eviti la divisione per zero

COALESCE e NULLIF è una lezione SQL Academy 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 Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Sostituzione dei valori mancanti

Rilevare i NULL è solo metà del lavoro — spesso si desidera sostituirli con un valore predefinito sensato. La funzione COALESCE di SQL fa esattamente questo.

E quando si desidera creare intenzionalmente un NULL, ad esempio per evitare una divisione per zero, NULLIF è lo strumento giusto. Questa lezione tratta entrambi.

-- Show a placeholder when phone is missing
SELECT name, COALESCE(phone, 'no phone on file') AS phone
FROM customers;

Come funziona COALESCE

COALESCE accetta un numero qualsiasi di argomenti e restituisce il primo valore diverso da NULL, da sinistra verso destra.

Se ogni argomento è NULL, il risultato è NULL. Lo si può pensare come «usa questo, oppure quello, oppure infine questa alternativa».

SELECT
  COALESCE(NULL, NULL, 'third', 'fourth') AS a, -- 'third'
  COALESCE(NULL, 42)                       AS b, -- 42
  COALESCE(NULL, NULL)                     AS c; -- NULL

Creare una catena di alternative

Poiché COALESCE accetta molti argomenti, è possibile creare una catena di preferenze.

Ad esempio, si può preferire un numero di cellulare, poi un numero di lavoro, poi un numero di casa e infine un messaggio letterale.

SELECT name,
  COALESCE(mobile, work_phone, home_phone, 'unreachable') AS best_contact
FROM contacts;

Valori predefiniti nei calcoli

NULL si propaga nelle operazioni aritmetiche, quindi un singolo valore mancante può rendere NULL un intero calcolo. Racchiuda l'input che può essere NULL in COALESCE per sostituirlo con un valore neutro.

Qui uno sconto mancante viene trattato come 0.

-- Without COALESCE, a NULL discount makes total NULL
SELECT
  price - COALESCE(discount, 0) AS total
FROM line_items;

Regole sui tipi di COALESCE

Tutti gli argomenti di COALESCE devono avere un tipo compatibile. PostgreSQL sceglie un tipo comune e genera un errore se non ci riesce.

Ad esempio, non è possibile combinare un numero e una stringa di testo libero senza eseguire un cast — anche il valore alternativo deve essere un numero.

-- OK: both integers
SELECT COALESCE(score, 0) FROM results;

-- Cast when mixing types
SELECT COALESCE(score::text, 'n/a') FROM results;

Introduzione a NULLIF

NULLIF(a, b) è, in linea di principio, l'opposto di COALESCE: restituisce NULL quando a = b e, altrimenti, restituisce a.

È un modo compatto per trasformare uno specifico valore «sentinella» in un NULL reale.

SELECT
  NULLIF(5, 5)   AS a,  -- NULL (equal)
  NULLIF(5, 9)   AS b,  -- 5    (not equal)
  NULLIF('', '') AS c;  -- NULL (treat empty string as missing)

NULLIF per evitare la divisione per zero

L'uso classico di NULLIF consiste nell'evitare gli errori di divisione. Dividere per 0 genera un errore, mentre dividere per NULL produce semplicemente NULL.

Racchiuda il divisore in NULLIF(divisor, 0) per trasformare un errore in un NULL sicuro.

-- If total_visits is 0, this would error.
-- NULLIF turns the divisor into NULL, giving a NULL ratio instead.
SELECT
  conversions / NULLIF(total_visits, 0) AS conversion_rate
FROM campaigns;

Combinare NULLIF e COALESCE

NULLIF e COALESCE si combinano bene. Utilizzi NULLIF per convertire un valore sentinella in NULL, quindi COALESCE per assegnare a quel NULL un valore predefinito appropriato.

Qui una nota costituita da una stringa vuota diventa il testo letterale "—".

-- Treat '' as missing, then display a dash
SELECT
  COALESCE(NULLIF(note, ''), '—') AS display_note
FROM tickets;

Rapporto medio sicuro

Metta tutto insieme per ottenere una query di analisi robusta: protegga dalla divisione per zero con NULLIF, quindi mostri 0 invece di NULL con COALESCE.

La query non genera mai errori e mostra sempre un numero pulito.

SELECT
  product_id,
  COALESCE(returns / NULLIF(orders, 0), 0) AS return_rate
FROM product_stats;

COALESCE e IS NULL a confronto

Entrambi gestiscono i NULL, ma hanno obiettivi diversi:

  • IS NULL / IS NOT NULL — verificano la presenza di valori mancanti in una condizione.
  • COALESCE — sostituisce un valore nell'output.

Ricorra a COALESCE quando struttura i risultati e a IS NULL quando applica un filtro.

-- Filter (IS NULL)
SELECT * FROM customers WHERE phone IS NULL;

-- Substitute (COALESCE)
SELECT COALESCE(phone, 'unknown') FROM customers;

Mettere tutto insieme

Un rapido riferimento per questa lezione:

  • COALESCE(a, b, c) → primo valore diverso da NULL.
  • NULLIF(a, b) → NULL quando sono uguali, altrimenti a.
  • Utilizzi NULLIF(divisor, 0) per evitare la divisione per zero.
  • Utilizzi COALESCE per assegnare valori predefiniti nei calcoli e nell'output.
SELECT
  COALESCE(nickname, full_name, 'guest')       AS display_name,
  revenue / NULLIF(orders, 0)                  AS avg_order_value
FROM accounts;

Verifica rapida

Che cosa restituisce NULLIF(amount, 0) quando amount è 0?

Riepilogo

Ora può sostituire i NULL con valori predefiniti usando COALESCE (vince il primo valore diverso da NULL) e creare deliberatamente dei NULL con NULLIF (restituisce NULL quando due valori coincidono).

Ha visto il modello per evitare la divisione per zero e come concatenare entrambe le funzioni per ottenere un output sicuro e pulito. Ora esplorerà il comportamento dei NULL all'interno di COUNT, SUM e delle JOIN.

SELECT
  COALESCE(NULLIF(comment, ''), 'no comment') AS comment,
  total / NULLIF(qty, 0)                       AS unit_price
FROM invoices;

Domande Frequenti

La lezione «COALESCE e NULLIF» è gratuita?

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

Fornisca valori predefiniti ed eviti la divisione per zero 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 3 di 4.

Quanto tempo richiede la lezione «COALESCE e NULLIF»?

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. Il vero significato di NULL
  2. IS NULL e IS NOT NULL
  3. COALESCE e NULLIF
  4. NULL negli aggregati e nei join
← Torna a SQL Academy