Многократное сравнение

При проверке на принадлежность результатам вложенного запроса с помощью предиката IN осуществляется многократное сравнение значения таблицы главного запроса с набором значений из таблицы вложенного запроса.

В SQL имеются еще две разновидности множественной проверки, осуществляемые с помощью предикатов ANY и ALL. С помощью этих предикатов проверка осуществляется не только на совпадение, но и на «больше» или «меньше».

Предикат ANY сравнивает проверяемое значение с набором данных, выбираемых вложенным запросом, используя операторы «=», «<>», «<», «<=», «>», «>=». Проверяемое значение поочередно сравнивается с каждым значением из набора данных. Если любое из этих сравнений дает значение TRUE, то и проверка ANY возвращает значение TRUE.

Приведем пример использования предиката ANY: вывести список служащих, принявших заказ на сумму, большую, чем на 10% от плана.

SELECT FAMILY, NAME

FROM SLUZHASCHIE S

WHERE (0.1*QUOTA < ANY (SELECT PRICE_ALL

FROM ZAKAZY Z

WHERE S.ID_SLZH = Z.ID_SLZH))

 

FAMILY NAME
Ганин Сергей
Петров Петр
Нилов Лев

Главный запрос последовательно проверяет все строки таблицы SLUZHASCHIE. Вложенный запрос находит все запросы, принятые текущим служащим, и возвращает набор данных, содержащий стоимости этих заказов. Предложение WHERE главного запроса вычисляет 10% от плана текущего служащего и использует это число в качестве проверяемого значения, сравнивая его со стоимостью каждого заказа, выбранного вложенным запросом.

Если есть хотя бы один заказ, стоимость которого превышает вычисленное значение, то проверка < ANY возвращает значение TRUE, а имя служащего заносится в результирующую таблицу. Если таких заказов нет, имя служащего в результирующую таблицу не заносится.

Предикат ALL, как и предикат ANY, использует один из шести операторов («=», «<>», «<», «<=», «>», «>=») для сравнения проверяемого значения с набором данных, выбранных вложенным запросом. В данном случае проверяемое значение последовательно сравнивается с каждым значением из набора данных. Если все сравнения дают положительный результат, то предикат ALL возвращает значение TRUE.

Пример. Вывести список офисов с их плановыми объемами продаж, все служащие которых превысили плановый объем продаж на 50% от плана офиса.

SELECT CITY, TARGET

FROM OFFICY O

WHERE (0.50*TARGET < ALL (SELECT SALES

FROM SLUZHASCHIE S

WHERE O.ID_OFC = S.ID_OFC))

CITY TARGET
Инза $300 000.00
Буинск $575 000.00
Орел $350 000.00

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

Предложение WHERE главного запроса вычисляет 50% от плана продаж офиса и сравнивает полученное значение со всеми объемами продаж, выдаваемыми вложенным запросом. Если все объемы продаж превышают вычисленное значение, то предикат < ALL возвращает значение TRUE и текущий офис включается в результирующую таблицу.








Дата добавления: 2015-02-03; просмотров: 914;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.