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