Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

<p>Предикат IS [NOT] NULL</p>

IS NULL и его противоположность IS NOT NULL являются парой предикатов, которые не используют группирование. Поскольку NULL не является значением, эти операторы не являются операторами сравнения. Они проверяют утверждение, что объект в левой части имеет значение (IS NOT NULL) или не имеет значения (IS NULL).

Если значение имеется, то IS NOT NULL возвращает истину независимо от содержимого, размера или типа данных значения.

Новички в SQL иногда путают ограничение NOT NULL с предикатами is [NOT] NULL. Общая ошибка считать, что IS NULL и IS NOT NULL проверяют, был ли определен столбец с ограничением NOT NULL. Это не так. Они тестируют текущее содержимое столбца на наличие или отсутствие значения.

Предикат is [NOT] NULL может быть использован для проверки входных данных, помещаемых в столбцы таблиц базы данных, имеющих ограничения NOT NULL. Обычно эти предикаты применяются в триггерах BEFORE INSERT (до добавления).

Более подробную информацию о NULL см. В разд. "Рассмотрение NULL".

<p>Предикаты существования</p>

Последняя группа предикатов включает предикаты, которые используют подзапросы для передачи значений для различного вида утверждений в условиях поиска. Ключевые слова для этих предикатов ALL, ANY, EXISTS, IN, SINGULAR и SOME. Они называются предикатами существования, потому что все они используются в предикатах поиска, которые разными способами проверяют существование значения в левой части предиката в выходных результатах включенных запросов к другим таблицам.

Все эти предикаты- описанные в табл. 21.6- используют в том или ином виде подзапросы. Тема подзапросов подробно рассматривается в главе 22.

Таблица 21.6. Предикаты существования

Предикат

Назначение

ALL

Проверяет, является ли сравнение истинным для всех значений, возвращенных подзапросом

[NOT] EXISTS

Существует ли (или нет) по крайней мере одно значение в выходном результате подзапроса

[NOT] IN

Существует ли (или нет) по крайней мере одно значение в выходном результате подзапроса

[NOT] SINGULAR

Проверяет, возвращает ли подзапрос в точности одно значение. Если возвращается NULL или более одного значения, то SINGULAR дает ложь (a NOT SINGULAR- истину)

SOME

Проверяет, является ли сравнение истинным по крайней мере для одного значения, возвращаемого подзапросом

ANY

Проверяет, является ли сравнение истинным по крайней мере для одного значения, возвращаемого подзапросом, SOME и ANY эквивалентны

Предикат EXISTS

Самый полезный из всех предикатов существования - EXISTS предоставляет самый быстрый из всех возможных методов способ проверки существования значения в другой таблице.

Часто в хранимых процедурах или запросах вам может понадобиться узнать, существуют ли в таблице строки, соответствующие некоторому набору критериев. Вас не интересует, сколько существует таких строк - нужно только определить, есть ли хотя бы одна. Стратегия выполнения COUNT(*) с последующей проверкой, что полученный результат больше нуля, дорого стоит в Firebird.

! ! !

ВНИМАНИЕ! Счетчик строк, полученный в контексте одной транзакции для проверки условия последующей работы в другой транзакции, - например, для вычисления значения "следующего" ключа - является совершенно ненадежным.

. ! .

Стандартный предикат SQL EXISTS (значение-подзапроса) и его противоположный аналог NOT EXISTS дают способ выполнения проверки существования набора, который является очень дешевым с точки зрения используемых ресурсов. Он не генерирует выходной набор, а просто проходит по таблице, пока не найдет строку, соответствующую условиям в подзапросе. В этот момент возвращается истина. Если же не находится ни одной строки, то возвращается ложь.

В первом примере EXISTS проверяет условия для выполнения изменения в операторе динамического SQL:

UPDATE TABLEA

SET COL6 ='SOLD'

WHERE COL1 =99

AND EXISTS(SELECT COLB FROM TABLEB WHERE COLB = 99);

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

В действительности многие подзапросы в предикатах EXISTS являются коррелированными, то есть условия поиска подзапроса связаны отношением с одним или более столбцами главного запроса. Возьмем предыдущий пример и заменим жестко закодированную константу в условии поиска ссылкой на столбец. Более реальный запрос может быть таким:

UPDATE TABLEA

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных