Скачиваний:
25
Добавлен:
01.04.2014
Размер:
761.34 Кб
Скачать

156 Понимание sql

______________________________________________________________________

ГЛ. 13

Даже если самая высокая сумма приобретений в таблице (9891.88) - имелась

на 6-е Октября, предыдущая строка имеет более высокое значение суммы чем

другая строка на 6-е Октября, которая имела значение суммы = 1309.95.

Имея реляционный оператор ">=" вместо просто " > ", эта строка будет

также выбирана, потому что она равна самой себе.

Конечно, вы можете использовать ANY с другой SQL техникой, например

с техникой обьединения.

Этот запрос будет находить все порядки со значением суммы меньшей чем

значение любой суммы для заказчика в San Jose.

( вывод показывается в Рисунке 13.7 ):

SELECT *

FROM Orders

WHERE amt < ANY

( SELECT amt

FROM Orders A, Customers b

WHERE a.cnum = b.cnum

AND b.city = " San Jose' );

Даже если нименьший порядок в таблице был для заказчика из San Jose,

то был второй наибольший; следовательно почти все строки будут выбраны.

Простой способ запомнить, что < ANY значение меньшее чем наибольшее

выбранное значение, а > ANY значение большее чем наименьшее выбран-

ное значение.

=============== SQL Execution Log ==============

| |

| SELECT * |

| FROM Orders |

| WHERE amt > ANY |

| (SELECT amt |

| FROM Orders |

| WHERE odate = 10/06/1990); |

| =============================================== |

| onum amt odate cnum snum |

| ----- -------- ---------- ----- ------ |

| 3002 1900.10 10/03/1990 2007 1004 |

| 3005 5160.45 10/03/1990 2003 1002 |

| 3009 1713.23 10/04/1990 2002 1003 |

| 3008 4723.00 10/05/1990 2006 1001 |

| 3011 9891.88 10/06/1990 2006 1001 |

================================================

Рисунок 13. 6: Выбранное значение больше чем любое(ANY) на 6-е Октября

ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ANY, ALL, И SOME 157

______________________________________________________________________

=============== SQL Execution Log ==============

| |

| WHERE amt > ANY |

| (SELECT amt |

| FROM Orders a, Customers b |

| WHERE a.cnum = b.cnum |

| AND b.city = 'San Jose'); |

| =============================================== |

| onum amt odate cnum snum |

| ----- -------- ---------- ----- ------ |

| 3001 18.69 10/03/1990 2008 1007 |

| 3003 767.10 10/03/1990 2001 1001 |

| 3002 1900.10 10/03/1990 2007 1004 |

| 3006 1098.10 10/03/1990 2008 1007 |

| 3009 1713.23 10/04/1990 2002 1003 |

| 3007 75.10 10/04/1990 2004 1002 |

| 3008 4723.00 10/05/1990 2006 1001 |

| 3010 1309.88 10/06/1990 2004 1002 |

================================================

Рисунок 13. 7: Использование ANY с объединением

Фактически, вышеуказанные команды весьма похожи на следующее -

(вывод показан на Рисунке 13.8) :

SELECT *

FROM Orders

WHERE amt <

( SELECT MAX amt

FROM Orders A, Customers b

WHERE a.cnum = b.cnum

AND b.city = " San Jose' );

=============== SQL Execution Log ==============

| |

| WHERE amt < |

| (SELECT MAX (amt) |

| FROM Orders a, Customers b |

| WHERE a.cnum = b.cnum |

| AND b.city = 'San Jose'); |

| =============================================== |

| onum amt odate cnum snum |

| ----- -------- ---------- ----- ------ |

| 3002 1900.10 10/03/1990 2007 1004 |

| 3005 5160.45 10/03/1990 2003 1002 |

| 3009 1713.23 10/04/1990 2002 1003 |

| 3008 4723.00 10/05/1990 2006 1001 |

| 3011 9891.88 10/06/1990 2006 1001 |

================================================

Рисунок 13.8: Использование агрегатной функции вместо ANY

Соседние файлы в папке ПОНИМАНИЕ SQL