5.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.