Работа операторов !=, <> и IS NOT NULL с NULL в SQL

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

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

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

В SQL NULL обозначает отсутствие значения. По этой причине любое сравнение с применением операторов неравенства: <> или != всегда возвращает false, поскольку мы не можем сравнивать неизвестное и четко заданное значение. Проверка наличия или отсутствия значения в случае работы с NULL достигается с помощью формулировок IS NULL или IS NOT NULL:

SQL
Скопировать код
-- Выбор строк, в которых значение в заданной колонке не NULL
SELECT *
FROM your_table
WHERE your_column IS NOT NULL;

Таким образом, вы сможете эффективно проверить представленные в колонке данные на предмет их наличия или отсутствия.

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

Глубокое понимание работы с NULL в SQL

Философия понимания NULL

Важно осознавать, что в рамках SQL NULL символизирует неопределенность. Он не равен нулю, пустой строке или даже другому NULL. Именно поэтому стандартные операторы сравнения неприменимы при работе с NULL. Сравнивать заданное значение с NULL — всё равно что сравнивать яблоки с неизвестностью.

Оптимальная работа с NULL

Параметр ANSI_NULLS в SQL Server влияет на поведение операторов != и <> при операциях с NULL. Однако следует помнить, что Microsoft планирует в будущем отказаться от этой функциональности. Поэтому подход к работе с NULL может в последующем значительно измениться.

Учет NULL при операциях с данными

Применение функции ISNULL позволяет удобно обрабатывать NULL и пустые строки, предоставляя возможность замены NULL на необходимое значение:

SQL
Скопировать код
-- Обработка NULL, с заменой на пустую строку
SELECT *
FROM your_table
WHERE ISNULL(your_column, '') != 'some_value';

Точное сравнение с NULL

Для более строго условия сравнения можно использовать выражение IS DISTINCT FROM, при этом считается, что два NULL значения представляют собой равноправные элементы:

SQL
Скопировать код
-- Запрос, при котором NULL рассматривается как идентичное NULL и отличное от других значений
SELECT *
FROM your_table
WHERE your_column IS DISTINCT FROM 'some_value';

В результате этого запроса будут возвращены строки, в которых your_column или NULL, или не содержит 'some_value', исключая потенциальные проблемы, возникающие при работе с NULL.

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

Представьте NULL как таинственный ящик (📦🌫️), операторы <> и != — как неподходящие ключи (🔑1, 🔑2):

Markdown
Скопировать код
Сравнение с NULL (📦🌫️) с использованием ключей:
- `<>` (🔑1)
- `!=` (🔑2)

Поскольку NULL – это неопределенность, предложенные ключи не годятся:

Markdown
Скопировать код
Попытки открыть 🔑1: 📦🌫️ = ❓ (Нет, результат неизвестен.)
Попытки открыть 🔑2: 📦🌫️ = ❓ (Также не удается, тайну не раскрыть.)

В SQL-диалекте эти ключи не способны раскрыть тайну NULL, поскольку он есть воплощение "неизвестного".

Практическая работа с NULL

NULL и пустые строки

Важно провести грань между ситуациями, когда данные отсутствуют (NULL), и когда данные предствавляют собой пустые строки. NULL – таковым и является, а не пустой строкой.

NULL и агрегирующие функции

NULL игнорируется большинством агрегирующих функций, вроде SUM() or COUNT(). Для того чтобы такие данные были корректно включены в результат, применяйте функции замены для NULL, например, ISNULL.

NULL и операции со множествами

При выполнении операций с множествами, таких как JOIN или WHERE EXISTS, NULL может привести к нежеланным последствиям. Обеспечьте четкое управление NULL в вашем SQL-запросе, чтобы минимизировать неожиданные результаты.

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

  1. SQL NULL Values — IS NULL and IS NOT NULL — детальное описание, как образуются значения NULL в SQL.
  2. Modern SQL: IS DISTINCT FROM — расшифровка стандарта ANSI SQL на примере работы с двух NULL значений как равнозначных с помощью оператора IS DISTINCT FROM.
  3. Comparison Operators (Transact-SQL) — SQL Server | Microsoft Learn — официальная документация Microsoft, посвященная операторам сравнения в T-SQL, в том числе и работе с NULL.
  4. PostgreSQL: Documentation: 9.2. Comparison Functions and Operators — подробная документация PostgreSQL по функциям сравнения и операторов, с учетом NULL.
  5. MySQL :: MySQL 8.0 Reference Manual :: Working with NULL Values — официальное руководство пользователя MySQL, посвященное работе с NULL в SQL-запросах.
  6. SQL NOT NULL Constraint — простое руководство по использованию ограничения NOT NULL в SQL.