
В SQL значение NULL обозначает отсутствие данных в ячейке таблицы. Оно не равно нулю или пустой строке, поэтому операции сравнения и агрегатные функции ведут себя иначе при работе с NULL. Для корректного присвоения и обработки NULL важно учитывать тип данных и ограничения столбца, такие как NOT NULL или DEFAULT.
Присвоение NULL новым записям выполняется через команду INSERT с указанием NULL в нужных столбцах. Для обновления существующих значений используют UPDATE, где можно задавать NULL в сочетании с условием WHERE, чтобы изменить только выбранные строки. Необходимо учитывать влияние NULL на логические выражения и фильтрацию, так как простое сравнение с «=» не сработает.
При работе с NULL рекомендуется применять функции проверки, такие как IS NULL и COALESCE, которые позволяют корректно обрабатывать пустые значения и заменять их на заданные данные. Планирование структуры таблицы с возможностью наличия NULL помогает избежать ошибок при подсчетах, объединениях и сортировке данных.
Использование NULL при создании новых записей

При добавлении новых записей в таблицу значение NULL можно указывать явно для столбцов, где разрешено отсутствие данных. Если столбец объявлен с ограничением NOT NULL, присвоение NULL вызовет ошибку. Для остальных столбцов SQL автоматически присвоит NULL, если значение не указано в команде INSERT.
Пример явного присвоения NULL при добавлении строки:
| Команда | Описание |
|---|---|
INSERT INTO users (id, name, email) VALUES (1, 'Иван', NULL); |
Создает запись с пустым значением в столбце email. |
INSERT INTO users (id, name) VALUES (2, 'Мария'); |
SQL присваивает NULL автоматически столбцу email, если он не указан. |
При проектировании таблицы рекомендуется заранее определить, какие столбцы могут принимать NULL, чтобы избежать ошибок вставки и обеспечить корректное поведение при агрегатных функциях и фильтрах.
Обновление существующих записей с NULL

Для изменения значения столбца на NULL используется команда UPDATE с указанием нужного столбца и условия WHERE для ограничения изменения только выбранных строк. Если условие отсутствует, NULL будет присвоен всем записям таблицы.
Пример обновления одного столбца:
UPDATE users SET email = NULL WHERE id = 3;
Строка с id = 3 получит пустое значение в столбце email.
Пример массового обновления нескольких столбцов:
UPDATE orders SET delivery_date = NULL, status = 'pending' WHERE status = 'processing';
Столбец delivery_date устанавливается в NULL для всех заказов со статусом ‘processing’, одновременно обновляется статус.
При работе с NULL важно учитывать, что стандартное сравнение через «=» не распознает пустые значения. Для фильтрации и условий следует использовать IS NULL или IS NOT NULL для корректной обработки обновленных данных.
Присвоение NULL через условные выражения

В SQL присвоение NULL можно выполнять с использованием условных выражений, таких как CASE или функции IF, чтобы изменять значения столбцов в зависимости от определенных условий.
Пример использования CASE в команде UPDATE:
UPDATE users SET phone = CASE WHEN phone = '' THEN NULL ELSE phone END;
В этом примере пустые строки в столбце phone заменяются на NULL, а остальные значения остаются без изменений.
Пример условного присвоения при вставке данных:
INSERT INTO orders (id, delivery_date) VALUES (10, CASE WHEN :input_date = '' THEN NULL ELSE :input_date END);
Если переменная :input_date пустая, в столбец delivery_date будет записан NULL, иначе вставляется указанная дата.
Использование условных выражений помогает автоматически контролировать пустые или некорректные данные, обеспечивая корректность таблицы без необходимости дополнительной очистки после вставки или обновления.
Различие между NULL и пустой строкой
Ключевые отличия:
- Сравнение: NULL не равен пустой строке. Выражение column = » не обнаружит NULL, для проверки используют IS NULL.
- Агрегатные функции: SUM, AVG, COUNT и другие игнорируют NULL, но учитывают пустые строки как значения, если столбец текстовый.
- Фильтрация: Для выборки NULL применяют IS NULL, для пустых строк используют = ».
- Присвоение: INSERT или UPDATE позволяет явно присвоить NULL или пустую строку, важно понимать, какое поведение требуется в таблице.
Рекомендации по использованию:
- Используйте NULL для отсутствующих данных, чтобы агрегатные функции и условия корректно обрабатывали записи.
- Используйте пустую строку только тогда, когда значение известно, но не содержит символов.
- При проектировании таблиц определите, какие столбцы могут принимать NULL, чтобы избежать путаницы между отсутствием значения и пустым значением.
Влияние NULL на агрегатные функции

В SQL агрегатные функции обрабатывают NULL особым образом. Большинство функций игнорируют NULL при вычислениях, что влияет на результаты и требует внимательного планирования запросов.
Примеры поведения функций:
- COUNT(column) учитывает только непустые значения, игнорируя NULL.
- SUM(column) и AVG(column) суммируют и усредняют только значения, отличные от NULL.
- MIN(column) и MAX(column) выбирают минимальное или максимальное значение среди непустых записей.
Рекомендации при работе с NULL:
- Для корректного подсчета всех записей используйте COUNT(*), который учитывает строки независимо от наличия NULL.
- Если требуется учитывать NULL как ноль, применяйте COALESCE(column, 0) в агрегатных функциях.
- При построении отчетов проверяйте наличие NULL, чтобы избежать искажений при суммировании и усреднении данных.
Проверка и фильтрация записей с NULL

Для поиска и фильтрации записей с NULL используются условия IS NULL и IS NOT NULL. Простое сравнение через «=» не распознает пустые значения, поэтому такие выражения не работают для NULL.
Примеры фильтрации:
Выбор записей с NULL:
SELECT * FROM users WHERE email IS NULL;
Выбор записей без NULL:
SELECT * FROM users WHERE email IS NOT NULL;
При комбинировании с другими условиями используют скобки для правильного приоритета:
SELECT * FROM orders WHERE (delivery_date IS NULL OR delivery_date > '2025-12-01') AND status = 'pending';
Для замены NULL при отображении данных применяют функции COALESCE или IFNULL, чтобы фильтры и агрегатные функции корректно обрабатывали записи без изменения структуры таблицы.
Вопрос-ответ:
В чем разница между NULL и пустой строкой в SQL?
NULL означает отсутствие значения в столбце, тогда как пустая строка (») является действительным значением длиной 0 символов. При фильтрации NULL не обнаруживается с помощью ‘=’, для проверки используют IS NULL. Функции SUM, AVG и COUNT игнорируют NULL, но учитывают пустые строки в текстовых столбцах.
Как присвоить NULL при добавлении новой записи в таблицу?
Для присвоения NULL используют команду INSERT с явным указанием NULL для нужного столбца. Например:
INSERT INTO users (id, name, email) VALUES (1, 'Иван', NULL);
Если столбец разрешает NULL, но не указан, SQL автоматически присвоит NULL.
Как обновить существующие записи, чтобы установить NULL в столбце?
Используют команду UPDATE с указанием столбца и условия WHERE. Пример:
UPDATE users SET email = NULL WHERE id = 3;
Это присвоит NULL только выбранной записи. Для массового обновления добавляют условия или оставляют их без WHERE, чтобы изменить все строки.
Можно ли использовать условные выражения для присвоения NULL?
Да, через CASE или функции типа IF можно присваивать NULL при соблюдении условий. Например:
UPDATE users SET phone = CASE WHEN phone = '' THEN NULL ELSE phone END;
Такой подход позволяет автоматически заменять пустые строки или некорректные значения на NULL.
Как фильтровать записи с NULL в запросах?
Для фильтрации применяют IS NULL и IS NOT NULL. Например:
SELECT * FROM users WHERE email IS NULL;
выбирает записи с пустыми значениями, а
SELECT * FROM users WHERE email IS NOT NULL;
— только с заполненными. Для сложных условий используют скобки и комбинируют с другими выражениями.
