Логические операторы

Логические операторы

Firebird предоставляет три логических оператора, которые могут работать с другими предикатами разными способами.

* NOT задает отрицание условия поиска, к которому он применяется. Он имеет наивысший приоритет.

* AND создает сложный предикат, объединяет два или более предикатов, каждый из которых должен быть истинным, чтобы был истинным и весь предикат. Он следующий по приоритету.

* OR создает сложный предикат, объединяет два или более предикатов, из которых хотя бы один должен быть истинным, чтобы был истинным весь предикат. Является последним по приоритету. По умолчанию Firebird 1.5 использует сокращенную булеву логику для определения значения предиката OR. Как только один из внутренних предикатов вернет истину, вычисления останавливаются, и весь предикат вернет истину[75].

Вот пример логического предиката:

COLUMN_l = COLUMN_2

OR ( (COLUMN_1 > COLUMN_2 AND COLUMN_3 < COLUMN_1)

AND NOT (COLUMN_4 = CURRENT_DATE) )

Опишем результат такого предиката. Если COLUMN_1 и COLUMN_2 будут равны, то вычисление останавливается, и предикат возвращает истину.

В противном случае проверяется следующий предикат - с двумя вложенными предикатами. Первый вложенный предикат сам имеет два вложенных предиката, оба из которых должны быть истинными, чтобы этот предикат был истинным. Если COLUMN_1 меньше, чем COLUMN_2, то вычисление останавливается, и весь предикат вернет ложь.

Если COLUMN_1 больше, то COLUMN_3 сравнивается с COLUMN_1. Если значение COLUMN_3 больше или равно COLUMN_1, то вычисление останавливается, и весь предикат вернет ложь.

Иначе производится вычисление последнего предиката. Если COLUMN_4 равно текущей дате, то весь предикат вернет ложь, в противном случае он вернет истину.

Включающее ИЛИ в сравнении с исключающим

Оператор OR В Firebird является включающим ИЛИ (одно условие или все условия должны быть истинными). Исключающее или (которое дает истину, только когда ровно одно условие является истинным, а все остальные ложными) не поддерживается.