Sök…
Introduktion
NULL
i SQL, liksom programmering i allmänhet, betyder bokstavligen "ingenting". I SQL är det lättare att förstå som "frånvaron av något värde".
Det är viktigt att skilja det från till synes tomma värden, till exempel den tomma strängen ''
eller antalet 0
, varken är faktiskt NULL
.
Det är också viktigt att vara försiktig så att du inte bifogar NULL
i citat, till exempel 'NULL'
, som är tillåtet i kolumner som accepterar text, men är inte NULL
och kan orsaka fel och felaktiga datamängder.
Filtrering för NULL i frågor
Syntaxen för filtrering för NULL
(dvs. frånvaron av ett värde) i WHERE
block är något annorlunda än filtrering för specifika värden.
SELECT * FROM Employees WHERE ManagerId IS NULL ;
SELECT * FROM Employees WHERE ManagerId IS NOT NULL ;
Observera att eftersom NULL
inte är lika med någonting, inte ens till sig själv, använder jämställdhetsoperatörer = NULL
eller <> NULL
(eller != NULL
) alltid sanningsvärdet för UNKNOWN
som kommer att avvisas av WHERE
.
WHERE
filtrerar alla rader att villkoret är FALSE
eller UKNOWN
och bara rader att villkoret är TRUE
.
Nullable kolumner i tabeller
När du skapar tabeller är det möjligt att förklara en kolumn som nullable eller non-nullable.
CREATE TABLE MyTable
(
MyCol1 INT NOT NULL, -- non-nullable
MyCol2 INT NULL -- nullable
) ;
Som standard är varje kolumn (utom de som är i primär nyckelbegränsning) nullable om vi inte uttryckligen ställer NOT NULL
begränsning.
Att försöka tilldela NULL
till en icke-nullable kolumn kommer att resultera i ett fel.
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.
Uppdaterar fält till NULL
Att ställa in ett fält till NULL
fungerar precis som med något annat värde:
UPDATE Employees
SET ManagerId = NULL
WHERE Id = 4
Infoga rader med NULL-fält
Till exempel infoga en anställd utan telefonnummer och ingen chef i tabellen Anställda :
INSERT INTO Employees
(Id, FName, LName, PhoneNumber, ManagerId, DepartmentId, Salary, HireDate)
VALUES
(5, 'Jane', 'Doe', NULL, NULL, 2, 800, '2016-07-22') ;