SQL: поиск записей с NULL или пустой строкой

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Главное отличие между NULL и пустой строкой '' в SQL заключается в том, что они олицетворяют разные концепции. Чтобы находить значения NULL, используйте IS NULL, для поиска пустых строк используйте сравнение с ''. Например, следующий запрос выведет строки, соответствующие любому из этих условий:

SQL
Скопировать код
SELECT * FROM your_table WHERE your_column IS NULL OR your_column = '';

Обратите внимание, что оператор = не применим для сравнения с NULL, поэтому использование IS NULL является необходимым. Запрос вернёт все записи, в которых столбец your_column содержит либо NULL, либо пустое значение.

Кинга Идем в IT: пошаговый план для смены профессии

Подробное руководство: рабочие методики с NULL и пустыми строками

1. Использование функций COALESCE и IFNULL

При составлении SQL-запросов функции COALESCE и IFNULL могут играть важную роль. Они позволяют трактовать NULL как пустую строку или заменить его на другое значение. Так можно выполнить замену NULL:

SQL
Скопировать код
-- "Replacement" будет использовано вместо нулевых значений.
SELECT COALESCE(your_column, 'replacement') FROM your_table;

В таких системах, как MySQL, аналогично можно применить функцию IFNULL:

SQL
Скопировать код
-- "Прощай NULL, здравствуй заменитель".
SELECT IFNULL(your_column, 'replacement') FROM your_table;

Такие функции особенно полезны, когда важно подставить вместо NULL какое-то дополнительное значение.

2. Применение функций NULLIF, LTRIM и RTRIM

Функция NULLIF используется для возвращения NULL, если значение столбца соответствует указанному параметру. Совместное использование этой функции с LTRIM и RTRIM может улучшить обработку случаев, когда в начале и конце строки присутствуют пробелы:

SQL
Скопировать код
-- SQL-эквивалент поиска иглы в стоге сена.
SELECT ISNULL(NULLIF(LTRIM(RTRIM(your_column)), ''), 'replacement') FROM your_table;

В результате такого запроса строки, полностью состоящие из пробелов или полностью пустые, будут заменены на 'replacement'.

3. Стратегия исключения: NULL, пустые строки и пробелы

Порой требуется исключить из выборки невалидные данные, в числе которых NULL и строки, представляющие собой пробелы. Следующий запрос отфильтрует строки, которые не соответствуют NULL, не являются пустыми или полностью состоящими из пробелов:

SQL
Скопировать код
-- Мы не приветствуем NULL, пустые строки и просто пробелы.
SELECT * FROM your_table WHERE ISNULL(LTRIM(RTRIM(your_column)), '') <> '';

Визуализация

Рассмотрим на конкретном примере, как работают NULL и пустая строка в SQL. Представим, что у нас есть два дома с различными комнатами:

Markdown
Скопировать код
Дом А 🏠: [Гостиная, Кухня 🍴, NULL (Пустая комната), Ванная 🛁]
Дом Б 🏠: [Гостиная, Кухня 🍴, '' (Невидимая комната), Ванная 🛁]

Путь через NULL выглядит так:

Markdown
Скопировать код
🚪🛋️ -> 🚪🍳 -> 🚪🚫 -> 🚪🛁
# NULL означает пустую комнату, которая есть в планировке, но пуста.

Путь через пустую строку отличается:

Markdown
Скопировать код
🚪🛋️ -> 🚪🍳 -> 🚪🤷‍♂️ -> 🚪🛁
# Пустая строка подобна невидимой комнате, которую не заметно при осмотре.

В SQL NULL представляет собой отсутствие значения, в то время как пустая строка используется для обозначения наличия значения, которое является пустым.

Максимально эффективное использование NULL и пустых строк: лучшие практики

1. Учитывайте типы данных

Когда работаете с NULL и пустыми строками, учитывайте типы данных. В некоторых СУБД, например, в Oracle, пустая строка интерпретируется как NULL. Рекомендуется проверить специфику используемой системы управления базами данных.

2. Контролируйте производительность

Индексация столбцов, включающих NULL или пустые строки, может существенно повлиять на производительность. Эффективная индексация ускоряет выполнение запросов, особенно в больших базах данных.

3. Советы по исправлению ошибок

Если запросы ведут себя непредсказуемо, пересмотрите следующие рекомендации:

  • Поиск скрытых пробелов с помощью функций LEN() или DATALENGTH().
  • Сравнение строк с образцом с помощью LIKE поможет обнаружить скрытые пробелы, например: your_column LIKE ' %'.
  • Всегда проверяйте типы данных и настройки сравнения, чтобы предотвратить неожиданные результаты при сопоставлении строк.

Полезные материалы