Come gestire correttamente i dati che includono NULL nella clausola IN in SQL

In questo articolo spiegheremo come gestire correttamente i dati che contengono valori NULL quando si utilizza la clausola IN nelle query SQL. NULL rappresenta un “valore sconosciuto” e richiede un trattamento speciale poiché non può essere gestito con gli operatori di confronto standard. Esploreremo i metodi per trattare correttamente i dati che includono NULL.

Indice

Comprensione di base dei valori NULL

NULL rappresenta un “valore sconosciuto” in un database. Indica che un valore non esiste, non è applicabile o è sconosciuto. In SQL, NULL viene trattato in modo speciale e richiede attenzione quando lo si confronta con altri valori.

Caratteristiche di NULL

Poiché NULL indica l’assenza di un valore, non può essere confrontato con altri valori. Ad esempio, NULL = NULL non restituisce TRUE, ma viene valutato come NULL. Questo perché NULL rappresenta un valore sconosciuto.

Come trattare i valori NULL

In SQL, esistono funzioni e condizioni speciali per gestire i valori NULL. I più comuni sono IS NULL e IS NOT NULL. Questi vengono utilizzati per verificare e gestire i valori NULL.

Uso base della clausola IN

La clausola IN viene utilizzata in SQL per impostare condizioni su un elenco di valori specifici, permettendo un filtraggio efficiente su più valori.

Sintassi di base della clausola IN

La sintassi di base della clausola IN è la seguente:

SELECT * FROM table_name WHERE column_name IN (value1, value2, value3);

Questa query restituisce le righe in cui la colonna specificata corrisponde a value1, value2 o value3.

Vantaggi della clausola IN

La clausola IN semplifica l’uso di più condizioni OR. Ad esempio, la seguente query:

SELECT * FROM table_name WHERE column_name = value1 OR column_name = value2 OR column_name = value3;

Può essere semplificata utilizzando la clausola IN:

SELECT * FROM table_name WHERE column_name IN (value1, value2, value3);

Questo rende la query più leggibile e facile da gestire.

Problemi con i dati che includono NULL

Quando si utilizza la clausola IN, è necessario prestare particolare attenzione ai dati che includono NULL. Poiché NULL rappresenta un “valore sconosciuto”, può produrre risultati inaspettati nelle operazioni di confronto standard.

Problemi tra NULL e la clausola IN

Se si include NULL in un elenco nella clausola IN, NULL non corrisponderà a nessun valore, quindi non influenzerà il risultato della query. Ad esempio, la seguente query ignora NULL:

SELECT * FROM table_name WHERE column_name IN (value1, value2, NULL);

Questa query restituirà solo le righe in cui column_name corrisponde a value1 o value2, ignorando NULL.

Problemi causati dalle caratteristiche dei valori NULL

In SQL, un confronto con NULL restituisce sempre FALSE o UNKNOWN. Pertanto, quando si utilizza la clausola IN su una colonna che può contenere NULL, i risultati potrebbero non essere quelli attesi. Ad esempio, la seguente query ignora NULL:

SELECT * FROM table_name WHERE column_name IN (value1, value2) OR column_name IS NULL;

In questo caso, è necessario aggiungere una condizione esplicita per gestire le righe con valori NULL.

Utilizzare IS NULL per gestire i dati

Per gestire correttamente i dati che includono NULL utilizzando la clausola IN, è utile combinare questa clausola con la condizione IS NULL. In questo modo, è possibile gestire esplicitamente i valori NULL.

Combinare IN e IS NULL

Combinando la clausola IN con IS NULL, è possibile filtrare correttamente i dati che includono NULL. L’esempio seguente mostra come ottenere le righe che includono anche valori NULL:

SELECT * FROM table_name WHERE column_name IN (value1, value2) OR column_name IS NULL;

Questa query restituirà tutte le righe in cui column_name corrisponde a value1 o value2, oltre alle righe con valori NULL.

Esempio pratico

Ad esempio, se si desidera ottenere i clienti con un determinato stato (‘Active’, ‘Pending’) o quelli il cui stato è NULL, si utilizzerà una query come la seguente:

SELECT * FROM customers WHERE status IN ('Active', 'Pending') OR status IS NULL;

In questo modo verranno restituiti tutti i clienti il cui stato è ‘Active’, ‘Pending’ o NULL.

Utilizzare UNION per risolvere i problemi

Un altro metodo per gestire correttamente i dati che includono NULL è utilizzare UNION. Con UNION, è possibile ottenere separatamente le righe con valori NULL e quelle con valori specifici, per poi unirle.

Sintassi di base di UNION

UNION consente di combinare i risultati di due o più query SELECT. Ogni query SELECT viene eseguita separatamente e i risultati vengono restituiti come un unico set.

SELECT * FROM table_name WHERE column_name IN (value1, value2)
UNION
SELECT * FROM table_name WHERE column_name IS NULL;

Esempio pratico

Ad esempio, per ottenere i prodotti con un determinato ID prodotto (1, 2) e quelli con ID prodotto NULL, si utilizzerà una query come la seguente:

SELECT * FROM products WHERE product_id IN (1, 2)
UNION
SELECT * FROM products WHERE product_id IS NULL;

Questa query restituirà tutti i prodotti con product_id 1 o 2, oltre ai prodotti con product_id NULL.

Differenze tra UNION e UNION ALL

UNION elimina le righe duplicate, mentre UNION ALL restituisce tutte le righe. Se si desidera eliminare i duplicati, si utilizzerà UNION; se si desidera ottenere tutte le righe, si utilizzerà UNION ALL.

Esempi di codice e pratica

Qui presentiamo alcuni esempi di codice per gestire correttamente i dati che includono NULL utilizzando la clausola IN. Questi esempi vi mostreranno come scrivere effettivamente le query.

Esempio con IS NULL

Innanzitutto, un esempio che combina la clausola IN con IS NULL. Si ottengono i clienti di un database con un determinato stato (‘Active’, ‘Pending’) o il cui stato è NULL:

SELECT * FROM customers WHERE status IN ('Active', 'Pending') OR status IS NULL;

Questa query restituirà tutti i clienti il cui stato è ‘Active’, ‘Pending’ o NULL.

Esempio con UNION

Successivamente, un esempio che utilizza UNION. Si ottengono i prodotti di un database con un determinato ID prodotto (1, 2) e quelli con ID prodotto NULL:

SELECT * FROM products WHERE product_id IN (1, 2)
UNION
SELECT * FROM products WHERE product_id IS NULL;

Questa query restituirà tutti i prodotti con product_id 1 o 2, oltre ai prodotti con product_id NULL.

Esempi di applicazione pratica

Nel lavoro pratico, ad esempio, per ottenere gli ordini di un database con un determinato stato (‘Completed’, ‘Pending’) o il cui stato è NULL, si utilizzerà una query come la seguente:

SELECT * FROM orders WHERE status IN ('Completed', 'Pending')
UNION
SELECT * FROM orders WHERE status IS NULL;

In questo modo verranno restituiti tutti gli ordini il cui stato è ‘Completed’, ‘Pending’ o NULL.

Conclusione

Abbiamo spiegato come gestire correttamente i dati che includono NULL utilizzando la clausola IN in SQL. Poiché NULL rappresenta un “valore sconosciuto”, è difficile da gestire con confronti standard e richiede misure speciali. Abbiamo esplorato metodi per combinare IN con IS NULL o utilizzare UNION per trattare correttamente i dati che includono NULL. Utilizzando correttamente questi metodi, è possibile garantire che i dati che includono NULL vengano correttamente inclusi nei risultati delle query.

Per scrivere correttamente le query SQL, è importante comprendere le caratteristiche di NULL e scegliere il metodo di gestione appropriato. Fate riferimento a questo articolo per trattare efficacemente i dati che includono NULL.

Indice