СРАВНЕНИЕ ТАБЛИЦЫ С СОБОЙ

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

onum atm odate cnum snum
3006 1098.19 10/03/1990 2008 1007
3010 1309.00 10/06/1990 2004 1002
3011 9891.88 10/06/1990 2006 1001


Рисунок 11.4: Соотнесение таблицы с собой

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

onum atm odate cnum snum
3003 767.19 10/03/1990 2001 1001
3002 1900.10 10/03/1990 2007 1004
3005 5160.45 10/03/1990 2003 1002
3006 1098.19 10/03/1990 2008 1007
3009 1713.23 10/04/1990 2002 1003
3010 1309.95 10/06/1990 2004 1002
3011 9891.88 10/06/1990 2006 1001


Рисунок 11.5: Выбераются порядки которые > = средней сумме приобретений для их заказчиков.

Различие, конечно, в том, что реляционный оператор основного предиката включает значения которые равняются среднему ( что обычно означает что они - единственые порядки для данных заказчиков ).