3.3.4.6 Работа с значениями NULL
К NULL
-значениям нужно привыкнуть. По идее, NULL
обозначает отсутствующее
или неизвестное значение и обрабатывается отличным от других значений
образом. Проверить значение на равенство NULL
с помощью обычных
арифметических операторов сравнения (=, < или <>) нельзя. Это отлично
иллюстрирует следующий запрос:
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
Очевидно, что от таких сравнений значащих результатов ожидать нечего.
Вместо этого нужно пользоваться операторами IS NULL
и IS NOT NULL
:
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
Отметим, что два значения NULL
считаются равными при выполнении команды
GROUP BY
.
В MySQL 0 или NULL
приравнивается к логическому false, а все остальное - к
true. По умолчанию значение "истина" для булевого оператора равно 1.
При выполнении команды ORDER BY
значения NULL
всегда располагаются в самом
начале списка результатов, даже при использовании параметра DESC
.
Именно из-за того, что при работе с NULL
действуют особые правила, в
предыдущем разделе для поиска умерших животных использовалось выражение
death IS NOT NULL
, а не death <> NULL
.