Иллюстрированный самоучитель по Visual FoxPro 8

Оператор EXISTS. Оператор UNION.

Оператор exists принимает значение True (Истина), если результат выполнения подзапроса является непустым множеством. Если порожденное подзапросом множество пусто, то exists принимает значение False (Ложь). Оператор not exists работает в точности наоборот. Он истинен, если результат подзапроса пуст, и ложен в противном случае.

Замечание
Операторы exists и not exists всегда помещаются перед подзапросом
.

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

SELECT cNmGoods;
FROM Goods
WHERE EXISTS
(SELECT *
FROM Customer, Ordsalem, Ordsaled;
WHERE Ordsalem.icdOrder=Ordsaled.icdOrder;
AND Ordsalem.iCdCustomer = Customer.iCdCustomer;
AND Ordsaled.iCdGoods = Goods.iCdGoods;
AND Customer.cCity = 'Новгород')

Оператор UNION

Для объединения результатов запросов используется оператор union. Результатом объединения является результирующее множество, состоящее из всех строк, входящих в какое-либо одно или в оба результирующих множества объединяемых запросов.

В качестве примера выберем список покупателей, которые живут в Новгороде или покупают товар с кодом 2103:

SELECT icdCustomer;
FROM Customer;
WHERE cCity = 'Новгород';
UNION;
SELECT icdCustomer;
FROM Ordsalem, Ordsaled;
WHERE Ordsalem.icdOrder=Ordsaled.icdOrder;
AND icdGoods = 2103

Из результата выборки, использующей оператор union, исключаются повторяющиеся строки. Для отображения их в результирующей выборке используйте опцию ALL.

Предупреждение
Фраза order by в запросе с использованием оператора union может входить только в последний оператор select
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.