0Pricing
SQL Academy · Lezione

IS NULL, IS NOT NULL e COALESCE

Rilevi i NULL con IS NULL, li sostituisca con COALESCE / NULLIF e progetti query che gestiscano senza problemi i dati mancanti

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

Verificare la presenza di NULL

Utilizzi IS NULL e IS NOT NULL, mai = NULL:

SELECT * FROM users WHERE deleted_at IS NULL;
SELECT * FROM users WHERE deleted_at IS NOT NULL;

Perché = NULL non funziona senza errori

Il confronto di qualsiasi valore con NULL restituisce NULL (sconosciuto). La riga viene eliminata, ma non viene generato alcun errore: così il bug arriva in produzione:

SELECT * FROM users WHERE deleted_at = NULL;
-- → returns 0 rows, always

COALESCE: il primo valore non NULL

COALESCE accetta un numero qualsiasi di argomenti e restituisce il primo che non è NULL:

SELECT id,
       COALESCE(nickname, full_name, email, 'Anonymous') AS display_name
FROM users;

COALESCE in WHERE

Utilizzi COALESCE per trasformare NULL in un valore predefinito ordinabile e confrontabile:

-- Treat NULL last_login_at as the epoch:
SELECT * FROM users
ORDER BY COALESCE(last_login_at, '1970-01-01') DESC;

NULLIF: l'inverso

NULLIF(a, b) restituisce NULL quando a = b; altrimenti restituisce a:

-- Treat 0 as missing so AVG ignores it:
SELECT AVG(NULLIF(price, 0)) FROM products;

-- Convert empty string to NULL on insert:
INSERT INTO contacts (phone) VALUES (NULLIF(:phone, ''));

CASE per i valori predefiniti condizionali

CASE è l'alternativa generica quando COALESCE non è sufficientemente flessibile:

SELECT id,
  CASE
    WHEN status IS NULL OR status = '' THEN 'unknown'
    WHEN status = 'A' THEN 'active'
    ELSE status
  END AS status_label
FROM users;

NULL in CHECK e nei vincoli

Un vincolo CHECK viene superato quando la condizione è NULL. Specifichi esplicitamente il comportamento se deve impedire i valori NULL:

CREATE TABLE prices (
  amount NUMERIC(10,2),
  CHECK (amount > 0)        -- amount = NULL passes!
);

-- Better:
CREATE TABLE prices2 (
  amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

NULL in JOIN ON

Le coppie di righe in cui la chiave di join è NULL non corrispondono mai: NULL = NULL restituisce NULL. Utilizzi IS NOT DISTINCT FROM se desidera che NULL sia uguale a NULL:

SELECT * FROM a JOIN b ON a.key IS NOT DISTINCT FROM b.key;

NULL e UNIQUE

Lo standard SQL considera distinti i valori NULL nei vincoli UNIQUE: è possibile avere molte righe NULL:

CREATE TABLE invites (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) UNIQUE
);
INSERT INTO invites (email) VALUES (NULL), (NULL); -- both succeed!

Riepilogo di NULL e aggregazioni

Le aggregazioni, eccetto COUNT(*), ignorano i valori NULL.

SELECT COUNT(*)            FROM users;  -- all rows
SELECT COUNT(email)        FROM users;  -- rows where email IS NOT NULL
SELECT COUNT(DISTINCT id)  FROM users;

Dichiari sempre NOT NULL quando possibile

NOT NULL è la garanzia di correttezza più semplice e più forte. Lo aggiunga a ogni colonna che non deve mai essere vuota.

Riepilogo

La gestione di NULL è la principale fonte di bug SQL difficili da individuare.

  • Verifichi con IS NULL
  • Sostituisca con COALESCE
  • Converta i valori sentinella in NULL con NULLIF
  • Imposti NOT NULL come scelta predefinita

Verifica rapida

Quale espressione restituisce email se non è NULL e, altrimenti, il valore letterale 'no-email'?

Domande Frequenti

La lezione «IS NULL, IS NOT NULL e COALESCE» è gratuita?

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

Rilevi i NULL con IS NULL, li sostituisca con COALESCE / NULLIF e progetti query che gestiscano senza problemi i dati mancanti 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 4 di 4.

Quanto tempo richiede la lezione «IS NULL, IS NOT NULL e COALESCE»?

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. Pattern LIKE e caratteri jolly
  2. IN e NOT IN per gli insiemi
  3. BETWEEN per gli intervalli
  4. IS NULL, IS NOT NULL e COALESCE
← Torna a SQL Academy