MySQL IS NULL e IS NOT NULL con esempi

⚡ Riepilogo intelligente

MySQL IS NULL e IS NOT NULL sono parole chiave di confronto che verificano se una colonna contiene un valore mancante. NULL indica l'assenza di dati, si comporta in modo diverso da zero o da una stringa vuota e richiede operatori specifici per un filtraggio affidabile.

  • 🧩 Definizione di base: NULL è un segnaposto per dati inesistenti. Non è un tipo di dato e non rappresenta il numero zero.
  • Comportamento aritmetico: Qualsiasi espressione aritmetica che coinvolga NULL restituisce NULL, quindi 69 + NULL restituisce NULL anziché 69.
  • 📊 Impatto complessivo: La funzione COUNT(colonna) e altre funzioni di aggregazione ignorano le righe NULL, mentre COUNT(*) conta comunque tutte le righe della tabella.
  • 🚫 Vincolo NOT NULL: Dichiarare una colonna NOT NULL impedisce l'inserimento di qualsiasi dato che ometta un valore, proteggendo così i campi obbligatori come gli identificativi.
  • 🔍 Filtro corretto: IS NULL e IS NOT NULL sono gli unici test affidabili, perché l'operatore di uguaglianza non corrisponde mai a un valore NULL.
  • Logica a tre valori: Il confronto con NULL restituisce UNKNOWN, quindi SELECT NULL = NULL produce NULL invece di TRUE.

MySQL È NULL E NON È NULL

In SQL, NULL è sia un valore che una parola chiave. Analizziamo innanzitutto il valore NULL.

MySQL È NULLO E NON È NULLO

Che cos'è NULL in MySQL?

In parole povere, NULL è un segnaposto per dati inesistentiQuando si eseguono operazioni di inserimento nelle tabelle, a volte può capitare che alcuni valori dei campi non siano disponibili.

Per soddisfare i requisiti dei veri sistemi di gestione di database relazionali, MySQL Utilizza NULL come segnaposto per i valori non inviati. Lo screenshot seguente mostra l'aspetto dei valori NULL in una tabella di database.

Nullo come valore

Notate che le celle vuote sono contrassegnate con NULL, non con testo vuoto e non con zero. Prima di proseguire, esaminiamo alcuni concetti di base relativi a NULL.

  • NULL non è un tipo di dati – ciò significa che non è riconosciuto come “int”, “date” o qualsiasi altro tipo di dati definito.
  • Operazioni aritmetiche coinvolgendo NULL sempre restituisce NULL, ad esempio, 69 + NULL = NULL.
  • ponte funzioni aggregate ignora le righe che contengono valori NULLL'unica eccezione è COUNT(*), che conta ogni riga indipendentemente dal valore NULL.

Come le funzioni aggregate gestiscono i valori NULL

Questa regola modifica le risposte restituite dalle query di reporting, quindi dimostriamolo. Partiamo dal contenuto attuale della tabella dei membri.

SELECT * FROM `members`;

L'esecuzione dello script sopra riportato produce i seguenti risultati.

membership_ number full_ names gender date_of_ birth physical_ address postal_ address contact_ number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter MaleNULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper Male NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali Male NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle Male 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz Male 24-08-1981 SouthPark P.O. Box 4563 987786553 lwolowitz[at]email.me

La colonna "contact_number" evidenziata contiene in totale nove righe, ma due di esse sono NULL. Contiamo ora tutti i membri che hanno aggiornato il proprio numero di telefono.

SELECT COUNT(contact_number) FROM `members`;

L'esecuzione della query di cui sopra fornisce i seguenti risultati.

COUNT(contact_number)
7

Nota: La risposta è 7 e non 9, perché i due valori NULL non sono stati inclusi. Eseguendo COUNT(*) sulla stessa tabella si otterrebbe 9, poiché COUNT(*) conta le righe anziché i valori.

Valori NON NULL

Un approccio più sicuro consiste nell'impedire del tutto l'inserimento di valori NULL nelle colonne obbligatorie. Questo è il compito del vincolo NOT NULL.

Che cosa è il NON Operatore?

L'operatore logico NOT viene utilizzato per verificare condizioni booleane e restituisce vero se la condizione è falsa. L'operatore NOT restituisce falso se la condizione verificata è vera.

Condizioni dell'oggetto NON Operarisultato
I veri Falso
Falso I veri

Perché usare NOT NULL?

Ci saranno casi in cui dovremo eseguire calcoli sul set di risultati di una query e restituirne i valori. L'esecuzione di qualsiasi operazione aritmetica su una colonna che contiene un valore NULL restituisce un risultato NULL. Per evitare tali situazioni, possiamo utilizzare la clausola NOT NULL per limitare i risultati su cui vengono eseguite le operazioni sui nostri dati.

Creazione di una tabella con una colonna NOT NULL

Supponiamo di voler creare una tabella con determinati campi che devono essere sempre compilati con valori quando si inseriscono nuove righe. Possiamo utilizzare la clausola NOT NULL su un dato campo durante la creazione della tabella.

L'esempio riportato di seguito crea una nuova tabella contenente i dati dei dipendenti. Il numero di matricola del dipendente deve essere sempre specificato.

CREATE TABLE `employees`(
  employee_number int NOT NULL,
  full_names varchar(255) ,
  gender varchar(6)
);

Proviamo ora a inserire un nuovo record senza specificare il numero del dipendente e vediamo cosa succede.

INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');

Eseguendo lo script precedente in MySQL banco di lavoro Si verifica il seguente errore perché la colonna obbligatoria è stata omessa.

Valori NON NULL

È NULL e NON È NULL Parole chiave

Il vincolo blocca i nuovi valori NULL. Per lavorare con valori NULL già esistenti, si utilizza la parola chiave NULL. La sintassi è la seguente.

column_name IS NULL
column_name IS NOT NULL

QUI

  • "È ZERO" è la parola chiave che esegue il confronto booleano. Restituisce true se il valore fornito è NULL e false se il valore fornito non è NULL.
  • “NON È NULLO” è la parola chiave che esegue il confronto inverso. Restituisce true se il valore fornito non è NULL e false se il valore fornito è NULL.

Vediamo un esempio pratico che utilizza la parola chiave IS NOT NULL per eliminare tutte le righe che contengono valori NULL in una colonna.

Continuando con la tabella dei membri di cui sopra, supponiamo di aver bisogno dei dettagli dei membri il cui numero di telefono non è NULL. Possiamo eseguire una query come questa.

SELECT * FROM `members` WHERE contact_number IS NOT NULL;

L'esecuzione della query di cui sopra restituisce solo i sette record in cui è presente il numero di telefono, il che corrisponde al risultato COUNT della sezione precedente.

Ora supponiamo di voler ottenere l'opposto: i record dei membri in cui manca il numero di telefono. Possiamo utilizzare la seguente query.

SELECT * FROM `members` WHERE contact_number IS NULL;

L'esecuzione della query di cui sopra restituisce i due record dei membri il cui numero di contatto è NULL.

membership_ number full_names gender date_of_birth physical_address postal_address contact_ number email
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

Attenzione: Una condizione come WHERE contact_number = NULL restituisce un set di risultati vuoto, anche se esistono valori NULL. L'operatore di uguaglianza non può mai corrispondere a NULL, quindi IS NULL è l'unico test corretto.

Confronto di valori NULL con logica a tre valori

Logica a tre valori – l'esecuzione di operazioni booleane su condizioni che coinvolgono NULL può restituire “Sconosciuto”, “Vero” o “Falso”.

Utilizzo della parola chiave “IS NULL” quando si eseguono operazioni di confronto che coinvolgono NULL problemi vero or falso. L'utilizzo degli altri operatori di confronto restituisce “Sconosciuto” (NULL)La tabella seguente confronta ciascuna espressione affiancandola.

Espressione Risultato Significato
SELEZIONA 5 = 5; 1 TRUE
SELECT NULL = NULL; NULL SCONOSCIUTO
SELEZIONA 5 > 5; 0 FALSO
SELECT NULL > NULL; NULL SCONOSCIUTO
SELECT 5 IS NULL; 0 FALSO
SELECT NULL IS NULL; 1 TRUE

Confronta il numero cinque con se stesso, quindi ripeti l'operazione con NULL.

SELECT 5 =5;
SELECT NULL = NULL;
5 =5 NULL = NULL
1 NULL

Il primo risultato è 1 (VERO). Il secondo è NULL, perché MySQL Non è possibile affermare che un valore sconosciuto sia uguale a un altro valore sconosciuto. Ora usa la parola chiave IS NULL sugli stessi valori.

SELECT 5 IS NULL;
SELECT NULL IS NULL;
5 IS NULL NULL IS NULL
0 1

Questa volta le risposte sono definitive: 0 (FALSO) e 1 (VERO). Solo le parole chiave IS NULL e IS NOT NULL restituiscono una risposta definitiva quando è presente NULL.

DOMANDE FREQUENTI

Zero è un numero e una stringa vuota è testo, quindi entrambi corrispondono ai test di uguaglianza. NULL significa che non è stato fornito alcun valore, motivo per cui risponde solo ai test IS NULL e IS NOT NULL.

IFNULL(colonna, 'N/D') restituisce il sostituto ogni volta che la colonna è NULL. COALESCE(a, b, c) restituisce il primo argomento che non è NULL. Entrambi sono utili all'interno MySQL funzioni e rapporti.

No. MySQL L'indice NOT NULL viene applicato automaticamente a ogni colonna della chiave primaria, poiché una chiave che identifica una riga non può essere mancante. Un indice UNIQUE è diverso e consente più valori NULL.

Di solito sì. Gli assistenti IA all'interno di strumenti come MySQL banco di lavoro trasformare “membri senza numero di telefono” in una clausola WHERE column IS NULL. RevEsamina il filtro, perché un test di uguaglianza con NULL non restituisce alcun risultato silenzioso.

Spesso sì. Gli strumenti di revisione dell'IA segnalano errori come i confronti = NULL, un SELEZIONA che calcola la media di una colonna contenente valori NULL e degli elenchi NOT IN contenenti valori NULL. Il giudizio finale spetta a chi conosce i dati.

Riassumi questo post con: