Вы можете также использовать соотнесенный подзапрос, основанный на той же самой таблице, что и основной запрос. Это даст вам возможность извлечь определенные сложные формы произведенной информации. Например, мы можем найти все Заказы со значениями сумм приобретений выше среднего для их заказчиков (вывод показан в Рисунке 11.4):
SELECT * FROM Orders outer WHERE amt > (SELECT AVG (amt) FROM Orders inner WHERE inner.cnum = outer.cnum);
Конечно, в нашей маленькой типовой таблице, где большинство заказчиков имеют только один заказ, большинство значений являются одновременно средними и, следовательно, не выбираются. Давайте введем команду другим способом (вывод показывается в Рисунке 11.5):
SELECT * FROM Orders outer WHERE amt >= (SELECT AVG (amt) FROM Orders inner WHERE inner.cnum = outer.cnum);
Рисунок 11.5. Выбираются Заказы, которые >= средней сумме приобретений для их заказчиков.
Различие, конечно, в том, что реляционный оператор основного предиката включает значения, которые равняются среднему (что обычно означает, что они — единственные Заказы для данных заказчиков).
Примечание. В примерах запросов, приведенных в этом разделе, используются псевдонимы "inner" и "outer", которые в СУБД Interbase (возможно, и в других СУБД) являются ключевыми словами, и, следовательно, должны быть изменены.