При сравнении неопределенных значений не
При сравнении неопределенных значений не действуют стандартные правила сравнения: одно неопределенное значение никогда не считается равным другому неопределенному значению. Для выявления равенства значения некоторого атрибута неопределенному применяют специальные стандартные предикаты:
<имя атрибута>IS NULL и <имя атрибута> IS NOT NULL.
Если в данном кортеже (в данной строке) указанный атрибут имеет неопределенное значение, то предикат IS NULL принимает значение «Истина» (TRUE), а предикат IS NOT NULL — «Ложь» (FALSE), в противном случае предикат IS NULL принимает значение «Ложь», а предикат IS NOT NULL принимает значение «Истина».
Введение Null-значений вызвало необходимость модификации классической двузначной логики и превращения ее в трехзначную. Все логические операции, производимые с неопределенными значениями, подчиняются этой логике в соответствии с заданной таблицей истинности:
А |
В |
Not A |
А ^ В |
A ![]() |
||
TRUE |
TRUE |
FALSE |
TRUE |
TRUE |
||
TRUE |
FALSE |
FALSE |
FALSE |
TRUE |
||
TRUE |
Null |
FALSE |
Null |
TRUE |
||
FALSE |
TRUE |
TRUE |
FALSE |
TRUE |
||
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
||
FALSE |
Null |
TRUE |
FALSE |
Null |
||
Null |
TRUE |
Null |
Null |
TRUE |
||
Null |
FALSE |
Null |
FALSE |
Null |
||
Null |
Null |
Null |
Null |
Null |
||
В условиях поиска могут быть использованы все рассмотренные ранее предикаты.
Отложив на время знакомство с группировкой, рассмотрим детально первые три строки оператора SELECT: