Шрифт:
(x < Null); (x <= Null); (x = Null); (x /= Null); (x > Null);
(x >= Null) Null;
Поэтому по аналогии с пустыми значениями для проверки выражения на Null-значения необходимо использовать специальный предикат:
IsNull (<выражение>), что буквально означает «есть Null».
Логическая функция возвращает значение True, если в выражении присутствует Null или оно равно Null, и False – в противном случае, но никогда не возвращает значение Null. Предикат IsNull может применяться к переменным и выражению любого типа. Если применять его к выражениям пустого типа, предикат всегда будет возвращать False.
Например:
Итак, действительно, видим, что в первом случае, когда предикат IsNull взяли от нуля, на выходе получилось значение False. Во всех случаях, в том числе во втором и третьем, когда аргументы логической функции оказались равными Null-значению, и в четвертом случае, когда сам аргумент и был изначально равен Null-значению, предикат выдал значение True.
4. Null-значения и логические операции
Обычно в системах управления базами данных непосредственно поддерживаются только три логические операции: отрицание ¬, конъюнкция & и дизъюнкция . Операции следования => и равносильности <=> выражаются через них с помощью подстановок:
(x => y) (¬x y);
(x <=> y) (x => y) & (y => x);
Заметим, что эти подстановки полностью сохраняются и при использовании Null-значений.
Интересно, что при помощи операции отрицания «¬» любая из операций конъюнкция & или дизъюнкция может быть выражена одна через другую следующим образом:
(x & y) ¬ (¬x ¬y);
(x y) ¬ (¬x & ¬y);
На эти подстановки, как и на предыдущие, Null-значения влияния не оказывают.
А теперь приведем таблицы истинности логических операций отрицания, конъюнкции и дизъюнкции, но кроме привычных значений True и False, используем также Null-значение в качестве операндов. Для удобства введем следующие обозначения: вместо True будем писать t, вместо False – f, а вместо Null – n.
1. Отрицание ¬x.
Стоит отметить следующие интересные моменты касательно операции отрицания с использованием Null-значений:
1) ¬¬x x – закон двойного отрицания;
2) ¬Null Null – Null-значение является неподвижной точкой.
2. Конъюнкция x & y.
Эта операция также имеет свои свойства:
1) x & y y & x– коммутативность;
2) x & x x – идемпотентность;
3) False & y False, здесь False – поглощающий элемент;
4) True & y y, здесь True – нейтральный элемент.
3. Дизъюнкция x y.
Свойства:
1) x y y x – коммутативность;
2) x x x – идемпотентность;
3) False y y, здесь False – нейтральный элемент;
4) True y True, здесь True – поглощающий элемент.
Исключение из общего правила составляют правила вычисления логических операций конъюнкция & и дизъюнкция в условиях действия законов поглощения:
(False & y) (x & False) False;
(True y) (x True) True;
Эти дополнительные правила формулируются для того, чтобы при замене Null-значения значениями False или True результат бы все равно не зависел бы от этого значения.