2.6.    Результат действия трехзначных условных операторов

Условные операторы при отсутствии пустых значений воз­вращают либо TRUE (истина), либо FALSE (ложь). Если же в столбце присутствуют пустые значения, то может быть возвра­щено и третье значение: UNKNOWN (неизвестно). В этой схеме, например, условие WHERE А = 2, где А — имя столбца, значения которого могут быть неизвестны, при А = 2 будет соответство­вать TRUE, при А = 4 в результате будет получено значение FALSE, а при отсутствующем значении А (NULL-значение) ре­зультат будет UNKNOWN. Пустые значения оказывают влияние на использование логических операторов NOT, AND и OR.

Оператор NOT

Обычный унарный оператор NOT обращает оценку TRUE в FALSE и наоборот. Однако NOT NULL по прежнему будет возвра­щать пустое значение NULL. При этом следует отличать случай NOT NULL от условия IS NOT NULL, которое является противополож­ностью IS NULL, отделяя известные значения от неизвестных.

Оператор AND

• Если результат двух условий, объединенных оператором AND, известен, то применяются правила булевой логики, то есть при обоих утверждениях TRUE составное утверждение также будет TRUE. Если же хотя бы одно из двух утвержде­ний будет FALSE, то составное утверждение будет FALSE.

• Если результат одного из утверждений неизвестен, а другой оценивается как TRUE, то состояние неизвестного утвержде­ния является определяющим, и, следовательно, итоговый результат также неизвестен.

• Если результат одного из утверждений неизвестен, а другой оценивается как FALSE, итоговый результат будет FALSE.

• Если результат обоих утверждений неизвестен, то результат также остается неизвестным.

Оператор OR

• Если результат двух условий, объединенных оператором OR, известен, то применяются правила булевой логики, а имен­но: если хотя бы одно из двух утверждений соответствует TRUE, то и составное утверждение будет TRUE, если оба ут­верждения оцениваются как FALSE, то составное утвержде­ние будет FALSE.

• Если результат одного из утверждений неизвестен, а другой оценивается как TRUE, итоговый результат будет TRUE.

• Если результат одного из утверждений неизвестен, а другой оценивается как FALSE, то состояние неизвестного утвер­ждения имеет определяющее значение. Следовательно, ито­говый результат также неизвестен.

• Если результат обоих утверждений неизвестен, то результат также остается неизвестным.

Примечание

Отсутствующие (NULL) значения целесообразно исполь­зовать в столбцах, предназначенных для агрегирования, что­бы извлечь преимущества из способа обработки пустых значе­ний в функциях COUNT и AVERAGE. Практически во всех остальных случаях пустых значений следует избегать, так как при их наличии существенно усложняется корректное постро­ение условий отбора, приводя иногда к непредсказуемым ре­зультатам выборки. Для индикации же отсутствующих, неп­рименимых или по какой-то причине неизвестных данных можно использовать значения по умолчанию, устанавливае­мые заранее (например, с помощью команды CREATE TABLE (раздел 4.1)).