Поиск…


Вступление

NULL в SQL, а также программирование в целом означает буквально «ничего». В SQL это легче понять как «отсутствие какой-либо ценности».

Важно отличить его от кажущихся пустых значений, таких как пустая строка '' или число 0 , ни один из которых на самом деле не NULL .

Также важно быть осторожным, чтобы не заключать NULL в кавычки, например 'NULL' , который разрешен в столбцах, которые принимают текст, но не является NULL и может вызывать ошибки и неправильные наборы данных.

Фильтрация для NULL в запросах

Синтаксис фильтрации для NULL (т.е. отсутствия значения) в блоках WHERE несколько отличается от фильтрации для определенных значений.

SELECT * FROM Employees WHERE ManagerId IS NULL ;
SELECT * FROM Employees WHERE ManagerId IS NOT NULL ;

Обратите внимание, что поскольку NULL не равен чему-либо, даже самому себе, используя операторы равенства = NULL или <> NULL (или != NULL ), всегда будет давать значение правды UNKNOWN которое будет отклонено WHERE .

WHERE фильтрует все строки, что условие FALSE или UKNOWN и сохраняет только строки, что условие TRUE .

Столбцы в таблицах

При создании таблиц можно объявить столбец как nullable или non-nullable.

CREATE TABLE MyTable
(
    MyCol1 INT NOT NULL, -- non-nullable
    MyCol2 INT NULL      -- nullable
) ;

По умолчанию каждый столбец (кроме ограничений в отношении первичного ключа) имеет значение NULL, если мы явно не устанавливаем ограничение NOT NULL .

Попытка присвоить NULL столбцу, не допускающему null, приведет к ошибке.

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.

Обновление полей до NULL

Установка поля в NULL работает точно так же, как и с любым другим значением:

UPDATE Employees 
SET ManagerId = NULL
WHERE Id = 4

Вставка строк с полями NULL

Например, добавив сотрудника в номер таблицы « Сотрудники без номера телефона» и «нет менеджера»:

INSERT INTO Employees
    (Id, FName, LName, PhoneNumber, ManagerId, DepartmentId, Salary, HireDate)
VALUES
    (5, 'Jane', 'Doe', NULL, NULL, 2, 800, '2016-07-22') ;


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow