Если вы имеете дело с NULL
в базе данных, то вы должны рассматривать выражения как "triinary logi c". Таким образом, логическое значение больше не оценивается до двух значений (как в двоичное ), но до трех:
- True .
- Ложь .
- Нуль : Стандарт SQL не совсем ясен в своем определении, но это может означать полное отсутствие значения, что значение неизвестно или не может быть определено.
Теперь обратите внимание, что ограничение CHECK
и предложение WHERE
ведут себя по-разному в отношении нулевых значений. Рассмотрим следующий пример:
create table t (
a int check (a <> 5)
);
insert into t (a) values (1), (2), (null);
Предложение WHERE
Предложение WHERE
принимает строку, если предикат (выражение, которое представляет условие) является "истинным"; он отклоняет строку, если предикат оценивается как «false» или «null».
select * from t where a = 1;
Результат:
a
-
1
Как видите, «null» "был исключен из результирующего набора, поскольку предикат a = 1
оценивается как" нулевой ".
Ограничение CHECK
Ограничение CHECK
работает немного по-другому чем WHERE
. Предикат отклоняется, когда он оценивается только как «ложный»; он принимается, когда он оценивается как «истина», а также «ноль».
Именно поэтому он вставил все три строки, включая значение «ноль».
select * from t;
Результат:
a
----
1
2
null
Для значения "null" предикат a <> 5
оценивается как "null", поэтому он был принят и строка вставлена.