К 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 |
+-----------+---------------+
Отметим: в MySQL 0 или NULL
приравнивается к логическому false,
а все остальное - к true. По
умолчанию значение "истина" для
булевого оператора равно 1.
Именно из-за того, что при работе с
NULL действуют особые
правила, в предыдущем разделе для
поиска умерших животных
использовалось выражение death
IS NOT NULL, а не death <>
NULL.
Два NULL-значения
считаются одинаковыми в GROUP
BY.
При выполнении ORDER BY,
NULL-значения идут в
первую очередь если вы выполняете
ORDER ... ASC и в последнюю -
если ORDER BY ... DESC.
Обратите внимание, что в MySQL 4.0.2 -
4.0.10, NULL-значения всегда
возвращались в первую очередь,
вне зависимости от сортировки.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
