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.
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.