Подзапросы
С помощью SQL можно создавать вложенные запросы.
Обычно, внутренний запрос генерирует значение которое проверяется в условии
для внешнего запроса.
Чтобы оценить внешний( основной ) запрос, SQL сначала
должен оценить внутренний запрос (или подзапрос) внутри предложения WHERE.
Результат внутреннего запроса помещается в основной запрос вместо подзапроса.
SELECT icodCust
FROM sales!Customer
WHERE yCredit <
( SELECT AVG ( yCredit) FROM Customer) ;
Коррелированный
запрос
Запрос называется коррелированным, если выборка данных
осуществляется по результатам другой выборки.
При использовании подзапросов в SQL можно обратиться
к внутреннему запросу таблицы в предложении внешнего запроса FROM , сформировав
коррелированный (или соотнесенный) подзапрос. В этом случае подзапрос выполняется
неоднократно, по одному разу для каждой строки таблицы основного запроса.
SELECT icodeCust, yCredit, cCity
FROM sales!Customer Cust_X
WHERE yCredit >=
( SELECT AVG (yCredit) FROM sales!Customer Cust_Y
WHERE Cust_Y.cCity = Cust_X.cCity) ;
Cust_X, Cust_Y - псевдонимы таблицы.
Так как значение в поле cCity внешнего запроса меняется,
внутренний запрос должен выполняться отдельно для каждой строки внешнего
запроса.
Рассмотрим процедуру оценки, которую производит
коррелированный запрос:
1. Выбрать строку из таблицы, заданной во внешнем
запросе. Это будет текущая строка.
2. Сохранить значения из этой строки в псевдониме
с именем в предложении FROM внешнего запроса.
3. Выполнить подзапрос. Везде, где псевдоним данный
для внешнего запроса найден (в этом случае Cust_X), использовать
значение для текущей строки. Использование значения из строки внешнего
запроса в подзапросе называется внешней ссылкой.
4. Оценить условие внешнего запроса на основе результатов
подзапроса выполняемого в шаге 3. (Определяется будет ли текущая строка
выводится).
5. Повторить процедуру для следующей строки
таблицы, и так далее пока все строки таблицы не будут проверены.