|
Программирование >> Построение запросов sql
Рис. 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.
Рис. 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 включен в ТРЗ.
Рис. 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
Следует обратить внимание на то, что условия поиска, объединенные с помощью ключевых слов AND, OR и NOT, сами могут быть составными. Допустим, что необходимо найти фамилии всех абонентов, которые проживают на улицах с кодами от 3 до 6 или фамилии которых содержат букву Л. Для вывода требуемой информации нужно выполнить следующий запрос: SELECT Fio FROM Abonent WHERE (Streetcd BETWEEN 3 AND 6) OR (Fio LIKE %Л%);. Результат выполнения запроса представлен на рис. 3.17. АКСЕНОВ С.А. МИЩЕНКО Е.В. КОНЮХОВ В.С. ТУЛУПОВА М.И. СТАРОДУБЦЕВ Е.В. ШМАКОВ С.В. МАРКОВА В.П. ДЕНИСОВА Е.К. ЛУКАШИНА Р.М. ТИМОШКИНА Н.Г.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |