Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Исправляем MySQL запрос: исключаем '2' и NULL значения

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

Запомните, что операторы != и <> могут работать неправильно с NULL. Всегда используйте оператор IS NOT NULL совместно с ними. Например:

SQL
Скопировать код
SELECT * FROM ваша_таблица WHERE ваш_столбец IS NOT NULL AND ваш_столбец != 'некоторое_значение';

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

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

Обращаемся к функции COALESCE для работы с NULL

Чтобы заменить NULL на значение по умолчанию и обеспечить корректное сравнение, используйте функцию COALESCE:

SQL
Скопировать код
SELECT * FROM ваша_таблица WHERE COALESCE(ваш_столбец, 'значение_по_умолчанию') != 'некоторое_значение';

С помощью COALESCE мы преобразуем NULL в конкретное значение.

Применяем NULL-safe оператор сравнения <=>

SQL предлагает оператор <=>, безопасный для сравнения с NULL:

SQL
Скопировать код
SELECT * FROM ваша_таблица WHERE NOT(ваш_столбец <=> 'некоторое_значение');

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

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

Восприятие работы с NULL в SQL часто облегчается благодаря визуализации:

ЗначениеВаш запросРезультат
1!= 1✅ ИСТИНА
NULL!= 1❓ НЕИЗВЕСТНО

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

🎯 Важно: всегда включайте проверку на NULL в ваш SQL-запрос

SQL
Скопировать код
SELECT * FROM таблица WHERE (столбец IS NULL OR столбец != 1);

Таким образом, мы не забываем учесть значения, обозначенные как NULL.

Работаем с NULL в разных ситуациях

Исключение конкретных значений

Для исключения определённого значения, например '2', с учётом NULL, можно использовать следующую конструкцию:

SQL
Скопировать код
SELECT * FROM ваша_таблица WHERE (ваш_столбец != 2 OR ваш_столбец IS NULL);

Мы исключаем '2' из результатов запроса, но при этом учитываем NULL.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Предотвращение неожиданных результатов при условной логике

Если вы хотите избежать неожиданных результатов при использовании NOT IN и IN в контексте NULL, воспользуйтесь следующим подходом:

SQL
Скопировать код
SELECT * FROM ваша_таблица WHERE (ваш_столбец NOT IN (1, 2) OR ваш_столбец IS NULL);

Сортировка с учётом NULL

При сортировке значения NULL обычно выстраиваются внизу списка. Чтобы контролировать их положение, используйте:

SQL
Скопировать код
SELECT * FROM ваша_таблица ORDER BY CASE WHEN ваш_столбец IS NULL THEN 1 ELSE 0 END, ваш_столбец;

Таким образом, мы поднимаем непустые значения при сортировке.

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

  1. MySQL :: MySQL 8.0 Reference Manual :: 14.4.2 Операторы сравнения и функции – в официальной документации подробно описаны операторы сравнения.
  2. Modern SQL: Трехзначная логика (3VL) — обзор и особенности – всё, что вам нужно знать о тонкостях логики SQL и работе с NULL.
  3. Особенности работы с NULL: сравнения, сортировки и тонкости в MySQL — подробное руководство по работе с NULL.
  4. Эффективные подходы к проверке на NULL в SQL — обсуждение на Stack Overflow о различных подходах к проверке на NULL.
  5. Трехзначная логика SQL — аналогия SQL-логики с музыкальным инструментом, где NULL играет роль третьей ноты.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой оператор следует использовать для проверки на NULL в SQL?
1 / 5