CodeGym /Corsi /SQL SELF /Controllo dei valori NULL: IS NULL e IS NOT NULL

Controllo dei valori NULL: IS NULL e IS NOT NULL

SQL SELF
Livello 9, Lezione 1
Disponibile

Oggi continuiamo a esplorare NULL — l’eroe invisibile dei database. Se pensi ancora che NULL sia solo "niente", hai ragione, ma non del tutto. In questa lezione impareremo a controllare se nei nostri dati c’è NULL e cosa farci. Allora, pronti a dare la caccia all’assenza di valori?

Partiamo dal semplice — immagina di lavorare con il database di un e-commerce. Hai una tabella degli ordini, dove per alcuni ordini non hanno aggiunto info sui commenti, mentre per altri ci sono delle note. Se vuoi cercare tutti gli ordini senza note, ma usi i soliti confronti =, <>, rimarrai sorpreso... Perché? Perché NULL è un caso speciale!

In SQL i controlli sulla presenza o assenza di NULL si fanno con IS NULL e IS NOT NULL. Questi operatori ci aiutano a gestire NULL e ottenere i dati che ci servono.

Controllare i valori con IS NULL

IS NULL si usa per verificare se una colonna o un’espressione contiene il valore NULL.

SELECT *
FROM orders
WHERE comment IS NULL;

Questa query restituisce tutte le righe dove il valore nella colonna comment è NULL. Utile se vuoi trovare gli ordini senza note.

Ecco un esempio della tabella orders:

id customer_name total_amount comment
1 Otto Art 1500 "Consegna urgente"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Query:

SELECT id, customer_name
FROM orders
WHERE comment IS NULL;

Risultato:

id customer_name
2 Maria Chi
4 Anna Song

Nota che le righe con stringa vuota '' non sono incluse, perché '' non è NULL.

Controllare i valori con IS NOT NULL

IS NOT NULL funziona al contrario; controlla se il valore non è NULL. Per esempio, se vuoi tutti gli ordini con commenti inseriti:

SELECT *
FROM orders
WHERE comment IS NOT NULL;

Questa query restituisce solo le righe dove nella colonna comment ci sono dati (comprese le stringhe vuote '').

Esempio

La tabella orders resta la stessa.

id customer_name total_amount comment
1 Otto Art 1500 "Consegna urgente"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Eseguiamo la query:

SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Risultato:

id customer_name comment
1 Otto Art "Consegna urgente"
3 Alex Lin ''

Nota che la riga con la stringa vuota '' è inclusa. SQL considera questo valore come "non vuoto".

Quando usare IS NULL e IS NOT NULL?

Ecco qualche scenario:

  1. Filtraggio dati: vuoi escludere i record incompleti dove mancano valori.
  2. Gestione errori: a volte NULL può indicare un errore di inserimento dati, e devi isolare queste righe.
  3. Analisi dati: contare i record con valori mancanti aiuta a capire la qualità dei dati.

Applicazione pratica

Proviamo qualche esercizio pratico:

Esercizio 1: Selezionare studenti senza data di nascita

Supponiamo di avere la tabella students:

id name birth_date
1 Otto Art 2000-05-10
2 Maria Chi NULL
3 Alex Lin 1998-12-30
4 Anna Song NULL

Query:

SELECT name
FROM students
WHERE birth_date IS NULL;

Risultato:

name
Maria Chi
Anna Song

Questa query è utile per trovare gli studenti a cui manca la data di nascita.

Esercizio 2: Selezionare ordini con commenti

id customer_name total_amount comment
1 Otto Art 1500 "Consegna urgente"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Per la tabella orders possiamo trovare gli ordini con commenti compilati:

SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Risultato:

customer_name comment
Otto Art "Consegna urgente"
Alex Lin ''

Confronto con gli operatori standard

Ora facciamo un passo di lato e proviamo a eseguire una query "sbagliata" per controllare NULL:

SELECT *
FROM orders
WHERE comment = NULL;

Sorpreso? La query non restituirà nessuna riga, nemmeno quelle dove comment è chiaramente NULL. Questo perché NULL non si può confrontare con gli operatori standard. Per questi confronti dobbiamo usare IS NULL.

2
Compito
SQL SELF, livello 9, lezione 1
Bloccato
Ricerca di record con valore mancante
Ricerca di record con valore mancante
2
Compito
SQL SELF, livello 9, lezione 1
Bloccato
Filtraggio in base ai dati disponibili
Filtraggio in base ai dati disponibili
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION