Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУМКД_БД_2.doc
Скачиваний:
20
Добавлен:
23.09.2019
Размер:
6.01 Mб
Скачать

1.3.16. Составные условия отбора (операторы and, or и not)

Простые условия отбора после применения к некоторой строке возвращают значения TRUE, FALSE ИЛИ NULL. С помощью правил логики эти простые условия можно объединять в более сложные, как изображено на рисунке.

Рисунок 1.3.16.1 – Структура предложения

Обратите внимание на то, что условия отбора, объединённые с помощью операторов AND, OR и NOT, сами могут быть составными.

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

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

Оператор NOT можно использовать, чтобы выбрать строки, для которых условие отбора ложно, например:

Найти служащих, у которых фактический объем продаж меньше планового, но больше $150000.

SELECT NAME, QUOTA, SALES FROM SALESREPS

WHERE SALES < QUOTA AND NOT SALES < 150000.00

С помощью логических операторов AND, OR и NOT и круглых скобок можно создавать очень сложные условия отбора. Как и в случае с простыми условиями отбора, значения NULL влияют на интерпретацию составных условий отбора, вследствие чего результаты последних становятся не столь очевидными. В частности, результатом операции NULL OR TRUE является значение TRUE, а не NULL, как можно было ожидать (см. таблицы истинности для операторов AND, OR и NOT соответственно).

Таблица истинности оператора AND

AND

TRUE

FALSE

NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

FALSE

NULL

NULL

FALSE

NULL

Таблица истинности оператора OR

OR

TRUE

FALSE

NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL

Таблица истинности оператора NOT

NOT

TRUE

FALSE

NULL

FALSE

TRUE

NULL

Если с помощью операторов AND, OR и NOT объединяется более двух условий отбора, то в соответствии со стандартом ANSI/ISO оператор NOT имеет наивысший приоритет, за ним следует AND и только потом OR. Однако, чтобы гарантировать переносимость, всегда следует использовать круглые скобки; это позволит устранить все возможные неоднозначности.

В стандарте SQL2 появилось ещё одно логическое условие отбора – проверка IS. На рисунке изображена синтаксическая диаграмма этой проверки.

Оператор IS проверяет значение результата логического выражения.

Например, проверку

((SALES - QUOTA) > 10000.00) IS UNKNOWN

можно использовать, чтобы отыскать строки, в которых нельзя выполнить сравнение из-за того, что либо столбец SALES, либо столбец QUOTA имеет значение NULL. Подобным образом проверка

((SALES - QUOTA) > 10000.00) IS FALSE

позволяет выбрать строки, в которых значение столбца SALES если и превышает значение столбца QUOTA, то незначительно (с учётом округления). Как показывает данный пример, на самом деле проверка IS не привносит в SQL ничего нового, поскольку её можно переписать в виде:

NOT ((SALES - QUOTA) > 10000.00)

Для обеспечения максимальной переносимости следует записывать выражения только с помощью операторов AND, OR и NOT, однако избежать проверки IS UNKNOWN удается не всегда.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]