3.3.4.6 Работа с значениями 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. Для демонстрации попробуйте следующий запрос:
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
Поскольку результат любого арифметического сравнения со значением NULL также является значением NULL, получить осмысленные результаты из таких сравнений невозможно.
В MySQL значение 0 или NULL означает ложь, а любое другое значение означает истину. Значение по умолчанию для логического оператора — 1.
Это особое отношение к NULL объясняет, почему в предыдущем разделе для определения животных, которые больше не живы, необходимо было использовать death IS NOT
NULL вместо death <>
NULL.
Два значения NULL считаются равными в GROUP BY.
При выполнении ORDER BY значения NULL отображаются первыми, если вы выполните ORDER BY ... ASC, и последними, если выполните ORDER BY ... DESC.
Распространённая ошибка при работе со значением NULL заключается в предположении, что невозможно вставить ноль или пустую строку в столбец, определённый как NOT NULL, но это не так. Это, на самом деле, значения, в то время как NULL означает “не имеющее значения.” Проверить это можно, используя IS [NOT] NULL, как показано ниже:
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
Таким образом, вставить ноль или пустую строку в столбец типа NOT NULL вполне возможно, так как они, на самом деле, являются NOT NULL. См. Раздел B.3.4.3, «Проблемы со значениями NULL».
© 2025 Oracle
Licensed under the GPLv2 License.