Очень часто начинающие администраторы баз данных MySQL сталкиваються с проблемой обработки значения NULL из-за своего неправильного понимания этого значения. В этой статье попробуем разобрать что за зверь это значение NULL.
Значение NULL - Особое специальное значение (псевдозначение) соответствует понятию "пустое поле" (несодержащие никаких значений, не нуля, не значения пустой строки), используется для записи в поле таблицы базы данных MySQL.
Основные грабли закапаны как раз при сравнение значения NULL с другими значениями стандартными спосабами, но давайте попорядку.
Особенности значения NULL в MySQL.
Попробуем разобраться на следующих примерах. Сравним NULL с логическим значением FALSE, с пустой строкой, с нулем, с самим сабой (т.е. cо значением NULL) и проанализируем полученные результаты.
mysql> SELECT NULL = FALSE ; +--------------+ | NULL = FALSE | +--------------+ | NULL | +--------------+ 1 row in set (0.00 sec)
Вывод: NULL не равно логическому значению FALSE.
mysql> SELECT NULL = 0 ; +----------+ | NULL = 0 | +----------+ | NULL | +----------+ 1 row in set (0.00 sec)
Вывод: NULL не равно целочисленному нулю.
mysql> SELECT NULL = '' ; +-----------+ | NULL = '' | +-----------+ | NULL | +-----------+ 1 row in set (0.00 sec)
Вывод: NULL не равно пустой строке
mysql> SELECT NULL = NULL ; +-------------+ | NULL = NULL | +-------------+ | NULL | +-------------+ 1 row in set (0.00 sec)
Вывод: NULL не равно NULL
Видно что результат для всех запросов один - значение NULL. На первый взгляд это выглядит довольно странно, но мы знаем что пo определению значение NULL представляет как раз отсутствие какого либо значения и не принадлежит ни к одному типу данных.
Обработка значения NULL в запросе MySQL.
Как же обрабатывать значение NULL? В базах данных MySQL существуют специальные операторы IS NULL и IS NOT NULL для правильного сравнения значений с NULL.
Рассмотрим примеры:
SELECT * FROM name_table WHERE name_column IS NULL;
Этот запрос выведит строки содержащие значение NULL.
SELECT * FROM name_table WHERE neame_column IS NOT NULL;
А этот запрос выведит все строки, кроме строк содержащих значение NULL.
Помните, что при сравнение каких либо значение c NULL, всегда будет полyчен результат NULL.
Ниже представлены неправbльные запросы, которые невыведут ни одной строки.
SELECT * FROM name_table WHERE name_column = NULL; SELECT * FROM name_table WHERE name_column != NULL;
Вот и все. Делайте правельные выборки из баз MySQL содержащих NULL.
Компонент комментариев CComment