Программирование >>  Построение запросов sql 

1 ... 20 21 22 [ 23 ] 24 25 26 ... 101


FAILURECD

FAILURENM

Засорилась водогрейная колонка

Неисправен газовый счетчик

Неизвестна

Рис. 3.14. Результат выполнения запроса с проверкой вхождения в множество

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

3.2.2.7. Проверка значения на NULL

Признак NULL обеспечивает возможность применения трехзначной логики в условиях поиска. Результатом применения любого условия поиска может быть TRUE, FALSE или NULL (в случае, когда в одном из столбцов содержится NULL). Иногда бывает необходимо явно проверять значения столбцов на NULL и непосредственно обрабатывать их. Для этого в языке SQL имеется специальная проверка IS NULL. Синтаксис использования этого условия поиска следующий:

<значение> IS [NOT] NULL .

Например, необходимо вывести номера лицевых счетов абонентов и даты подачи ими заявок, по которым не выполнены ремонтные работы, т. е. поле ExecutionDate содержит NULL. Для этого можно использовать следующий запрос:

SELECT AccountCD, IncomingDate FROM Request

WHERE ExecutionDate IS NULL;.

Результат выполнения запроса представлен на рис. 3.15.

ACCOUNTCD

INCOMINGDATE

080270

31.12.2001

115705

28.12.2001

Рис. 3.15. Результат выполнения запроса с проверкой значения на NULL

В отличие от условий поиска, описанных выше, проверка на NULL не может возвратить NULL в качестве результата. Она всегда возвращает TRUE или



FALSE. Следует отметить, что нельзя проверить значение на равенство NULL с помощью простой операции сравнения, например:

SELECT AccountCD, IncomingDate

FROM Request WHERE ExecutionDate = NULL;. Запрос не будет выдавать синтаксическую ошибку (как это было бы в более ранних версиях Firebird), так как теоретически литерал NULL может участвовать во всех выражениях (A = NULL, B > NULL, A + NULL, B NULL и т. д.). Однако получится неправильный результат (NULL), так как если в операции сравнения одно из выражений имеет значение NULL, то и результат будет NULL.

3.2.2.8. Проверка двух значений на отличие

Для проверки значений на отличие используется следующий синтаксис: <значение> IS [NOT] DISTINCT FROM <значение1>.

Предикат DISTINCT аналогичен предикату равенства с тем лишь различием, что считает два признака NULL не различающимися (возвращает TRUE при NULL=NULL). Поскольку предикат DISTINCT считает, что два признака NULL не различаются, то он никогда не возвращает неизвестное значение. Подобно предикату IS [NOT] NULL предикат DISTINCT в качестве результата возвращает только TRUE или FALSE.

Например, требуется вывести всю информацию о ремонтных заявках с кодом неисправности, равным 1, даты выполнения которых отличаются от 20.12.2001. Соответствующий запрос будет выглядеть следующим образом:

SELECT * FROM Request WHERE FailureCD=1 AND

ExecutionDate IS DISTINCT FROM 20.12.2001;.

Результат выполнения запроса представлен на рис. 3.16, из которого следует, что признак NULL включен в ТРЗ.

REQUESTCD

ACCOUNTCD

EXECUTORCD

FAILURECD

INCOMINGDATE

EXECUTIONDATE

EXECUTED

115705

07.08.2001

12.08.2001

080270

31.12.2001

<null>

136169

06.11.2001

08.11.2001

Рис. 3.16. Результат выполнения запроса на проверку отличия 3.2.2.9. Составные условия поиска

Рассмотренные в предыдущих пунктах условия поиска являются простыми. С помощью правил логики эти простые условия можно объединять в более сложные.

СУБД Firebird предоставляет три вида логических операций [18]: - NOT задает отрицание условия поиска, к которому применяется, и имеет наивысший приоритет. Используется следующий синтаксис:



NOT <условие поиска>;

- AND создает сложный предикат, объединяя два или более условий поиска, каждое из которых должно быть истинным, чтобы был истинным и весь предикат. Данная операция является следующей по приоритету после NOT. Используется следующий синтаксис:

<условие поиска1> AND <условие поиска2>

- OR создает сложный предикат, объединяя два или более условий поиска, из которых хотя бы одно должно быть истинным, чтобы был истинным и весь предикат. Является последней по приоритету из трех логических операций и имеет следующий синтаксис:

<условие поиска1> OR <условие поиска2> Вычисления логических значений в составных условиях поиска задаются таблицей истинности (см. табл. 3.1).

Таблица 3.1. Логические результаты условий поиска AND и OR

У1 (условие поиска 1)

У2 (условие поиска2)

У1 AND У2

У1 OR У2

TRUE

TRUE

TRUE

TRUE

TRUE (FALSE)

FALSE (TRUE)

FALSE

TRUE

TRUE (NULL)

NULL (TRUE)

NULL

TRUE

FALSE

FALSE

FALSE

FALSE

FALSE (NULL)

NULL (FALSE)

FALSE

NULL

NULL

NULL

NULL

NULL

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

Допустим, что необходимо найти фамилии всех абонентов, которые проживают на улицах с кодами от 3 до 6 или фамилии которых содержат букву Л. Для вывода требуемой информации нужно выполнить следующий запрос:

SELECT Fio FROM Abonent

WHERE (Streetcd BETWEEN 3 AND 6) OR (Fio LIKE %Л%);.

Результат выполнения запроса представлен на рис. 3.17.

АКСЕНОВ С.А.

МИЩЕНКО Е.В.

КОНЮХОВ В.С.

ТУЛУПОВА М.И.

СТАРОДУБЦЕВ Е.В. ШМАКОВ С.В.

МАРКОВА В.П.

ДЕНИСОВА Е.К.

ЛУКАШИНА Р.М. ТИМОШКИНА Н.Г.



1 ... 20 21 22 [ 23 ] 24 25 26 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика