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.
In SQL, NULL è sia un valore che una parola chiave. Analizziamo innanzitutto il valore NULL.
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.
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 | |
|---|---|---|---|---|---|---|---|
| 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 | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Male | NULL | 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.
È 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 | |
|---|---|---|---|---|---|---|---|
| 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.



