SQL: поиск записей с NULL или пустой строкой
Быстрый ответ
Главное отличие между NULL и пустой строкой '' в SQL заключается в том, что они олицетворяют разные концепции. Чтобы находить значения NULL, используйте IS NULL, для поиска пустых строк используйте сравнение с ''. Например, следующий запрос выведет строки, соответствующие любому из этих условий:
SELECT * FROM your_table WHERE your_column IS NULL OR your_column = '';
Обратите внимание, что оператор = не применим для сравнения с NULL, поэтому использование IS NULL является необходимым. Запрос вернёт все записи, в которых столбец your_column содержит либо NULL, либо пустое значение.

Подробное руководство: рабочие методики с NULL и пустыми строками
1. Использование функций COALESCE и IFNULL
При составлении SQL-запросов функции COALESCE и IFNULL могут играть важную роль. Они позволяют трактовать NULL как пустую строку или заменить его на другое значение. Так можно выполнить замену NULL:
-- "Replacement" будет использовано вместо нулевых значений.
SELECT COALESCE(your_column, 'replacement') FROM your_table;
В таких системах, как MySQL, аналогично можно применить функцию IFNULL:
-- "Прощай NULL, здравствуй заменитель".
SELECT IFNULL(your_column, 'replacement') FROM your_table;
Такие функции особенно полезны, когда важно подставить вместо NULL какое-то дополнительное значение.
2. Применение функций NULLIF, LTRIM и RTRIM
Функция NULLIF используется для возвращения NULL, если значение столбца соответствует указанному параметру. Совместное использование этой функции с LTRIM и RTRIM может улучшить обработку случаев, когда в начале и конце строки присутствуют пробелы:
-- SQL-эквивалент поиска иглы в стоге сена.
SELECT ISNULL(NULLIF(LTRIM(RTRIM(your_column)), ''), 'replacement') FROM your_table;
В результате такого запроса строки, полностью состоящие из пробелов или полностью пустые, будут заменены на 'replacement'.
3. Стратегия исключения: NULL, пустые строки и пробелы
Порой требуется исключить из выборки невалидные данные, в числе которых NULL и строки, представляющие собой пробелы. Следующий запрос отфильтрует строки, которые не соответствуют NULL, не являются пустыми или полностью состоящими из пробелов:
-- Мы не приветствуем NULL, пустые строки и просто пробелы.
SELECT * FROM your_table WHERE ISNULL(LTRIM(RTRIM(your_column)), '') <> '';
Визуализация
Рассмотрим на конкретном примере, как работают NULL и пустая строка в SQL. Представим, что у нас есть два дома с различными комнатами:
Дом А 🏠: [Гостиная, Кухня 🍴, NULL (Пустая комната), Ванная 🛁]
Дом Б 🏠: [Гостиная, Кухня 🍴, '' (Невидимая комната), Ванная 🛁]
Путь через NULL выглядит так:
🚪🛋️ -> 🚪🍳 -> 🚪🚫 -> 🚪🛁
# NULL означает пустую комнату, которая есть в планировке, но пуста.
Путь через пустую строку отличается:
🚪🛋️ -> 🚪🍳 -> 🚪🤷♂️ -> 🚪🛁
# Пустая строка подобна невидимой комнате, которую не заметно при осмотре.
В SQL NULL представляет собой отсутствие значения, в то время как пустая строка используется для обозначения наличия значения, которое является пустым.
Максимально эффективное использование NULL и пустых строк: лучшие практики
1. Учитывайте типы данных
Когда работаете с NULL и пустыми строками, учитывайте типы данных. В некоторых СУБД, например, в Oracle, пустая строка интерпретируется как NULL. Рекомендуется проверить специфику используемой системы управления базами данных.
2. Контролируйте производительность
Индексация столбцов, включающих NULL или пустые строки, может существенно повлиять на производительность. Эффективная индексация ускоряет выполнение запросов, особенно в больших базах данных.
3. Советы по исправлению ошибок
Если запросы ведут себя непредсказуемо, пересмотрите следующие рекомендации:
- Поиск скрытых пробелов с помощью функций
LEN()илиDATALENGTH(). - Сравнение строк с образцом с помощью
LIKEпоможет обнаружить скрытые пробелы, например:your_column LIKE ' %'. - Всегда проверяйте типы данных и настройки сравнения, чтобы предотвратить неожиданные результаты при сопоставлении строк.