Тот факт, что в SQL используется не двухзначная, а трехзначная логика, ничего не меняет в используемых нами законах исчисления высказываний. В случае допустимости у столбцов пустых значений мы должны лишь проверить нужные нам столбцы на NULL. Этого достаточно.
Рассмотрим пример. Чуть раньше мы отображали список тех, чья дата рождения находится в диапазоне от 1.01.1960 до 31.12.1969. Мы использовали следующий оператор:
SELECT PR_NAME2AS "Имя",
PR_NAME3AS "Отчество",
PR_NAMEAS"Фамилия",
PR_BIRTHDAYAS"Дата рождения"
FROM PERSON
WHERE PR_BIRTHDAY>='1.01.1960'ANDPR_BIRTHDAY<='31.12.1969'
Если же нам нужен список людей с датами рождения, не входящими в этот диапазон (то есть находящимися в точности за пределами этого диапазона), то мы должны выполнить отрицание выражения:
PR_BIRTHDAY >= '1.01.1960’ AND PR_BIRTHDAY <= ‘31.12.1969’
В соответствии с законом де Моргана мы получаем оператор:[23]
SELECT PR_NAME2AS"Имя",
PR_NAME3AS"Отчество",
PR_NAMEAS"Фамилия",
PR_BIRTHDAY AS "Дата рождения"
FROM PERSON
WHERE (PR_BIRTHDAY<'1.01.1960'ORPR_BIRTHDAY>'31.12.1969')
Здесь нам нужно выполнить отрицание нашего выражения, задающего условия для окладов сотрудников. Отрицанием для операции сравнения >= будет < (или !>= или ^>=), для операции <= отрицанием будет > (!<=, ^ <=). Конъюнкцию мы меняем на дизъюнкцию.
Если кому-то вдруг по непонятной причине не очень нравится использование фактов из математической логики, то в данном случае легко можно использовать вариант BETWEEN, что мы и делали раньше:
PR_BIRTHDAY BETWEEN '1.01.1960’ AND ‘31.12.1969’
для задания первоначального диапазона и
PR_BIRTHDAY NOT BETWEEN '1.01.1960’ AND ‘31.12.1969’
для дат рождения за пределами этого диапазона. Применение закона де Моргана в этом случае выполнит сам сервер базы данных.