Ricerca…
introduzione
NULL
in SQL, oltre alla programmazione in generale, significa letteralmente "niente". In SQL, è più facile capire come "l'assenza di qualsiasi valore".
È importante distinguerlo da valori apparentemente vuoti, come la stringa vuota ''
o il numero 0
, nessuno dei quali è in realtà NULL
.
È inoltre importante fare attenzione a non includere NULL
tra virgolette, come 'NULL'
, che è consentito nelle colonne che accettano il testo, ma non è NULL
e può causare errori e set di dati errati.
Filtro per NULL nelle query
La sintassi per il filtraggio di NULL
(ovvero l'assenza di un valore) nei blocchi WHERE
è leggermente diversa rispetto al filtro per valori specifici.
SELECT * FROM Employees WHERE ManagerId IS NULL ;
SELECT * FROM Employees WHERE ManagerId IS NOT NULL ;
Si noti che poiché NULL
non è uguale a nulla, nemmeno a se stesso, usando gli operatori di uguaglianza = NULL
o <> NULL
(o != NULL
) produrrà sempre il valore di verità di UNKNOWN
che verrà rifiutato da WHERE
.
WHERE
filtra tutte le righe in cui la condizione è FALSE
o UKNOWN
e mantiene solo le righe in cui la condizione è TRUE
.
Colonne di Nullable nei tavoli
Quando si creano tabelle è possibile dichiarare una colonna come nullable o non annullabile.
CREATE TABLE MyTable
(
MyCol1 INT NOT NULL, -- non-nullable
MyCol2 INT NULL -- nullable
) ;
Di default ogni colonna (eccetto quelle nel vincolo della chiave primaria) è nullable a meno che non si imposti esplicitamente il vincolo NOT NULL
.
Se si tenta di assegnare NULL
a una colonna non nullable, si verificherà un errore.
INSERT INTO MyTable (MyCol1, MyCol2) VALUES (1, NULL) ; -- works fine
INSERT INTO MyTable (MyCol1, MyCol2) VALUES (NULL, 2) ;
-- cannot insert
-- the value NULL into column 'MyCol1', table 'MyTable';
-- column does not allow nulls. INSERT fails.
Aggiornamento dei campi su NULL
L'impostazione di un campo su NULL
funziona esattamente come con qualsiasi altro valore:
UPDATE Employees
SET ManagerId = NULL
WHERE Id = 4
Inserimento di righe con campi NULL
Ad esempio inserendo un dipendente senza numero di telefono e nessun manager nella tabella di esempio Dipendenti :
INSERT INTO Employees
(Id, FName, LName, PhoneNumber, ManagerId, DepartmentId, Salary, HireDate)
VALUES
(5, 'Jane', 'Doe', NULL, NULL, 2, 800, '2016-07-22') ;