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, alwaysCOALESCE: 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
- Pattern LIKE e caratteri jolly
- IN e NOT IN per gli insiemi
- BETWEEN per gli intervalli
- IS NULL, IS NOT NULL e COALESCE