The syntax for filtering for NULL
(i.e. the absence of a value) in WHERE
blocks is slightly different than filtering for specific values.
SELECT * FROM Employees WHERE ManagerId IS NULL ;
SELECT * FROM Employees WHERE ManagerId IS NOT NULL ;
Note that because NULL
is not equal to anything, not even to itself, using equality operators = NULL
or <> NULL
(or != NULL
) will always yield the truth value of UNKNOWN
which will be rejected by WHERE
.
WHERE
filters all rows that the condition is FALSE
or UKNOWN
and keeps only rows that the condition is TRUE
.
When creating tables it is possible to declare a column as nullable or non-nullable.
CREATE TABLE MyTable
(
MyCol1 INT NOT NULL, -- non-nullable
MyCol2 INT NULL -- nullable
) ;
By default every column (except those in primary key constraint) is nullable unless we explicitly set NOT NULL
constraint.
Attempting to assign NULL
to a non-nullable column will result in an error.
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.
Setting a field to NULL
works exactly like with any other value:
UPDATE Employees
SET ManagerId = NULL
WHERE Id = 4
For example inserting an employee with no phone number and no manager into the Employees example table:
INSERT INTO Employees
(Id, FName, LName, PhoneNumber, ManagerId, DepartmentId, Salary, HireDate)
VALUES
(5, 'Jane', 'Doe', NULL, NULL, 2, 800, '2016-07-22') ;