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

152 Понимание sql

______________________________________________________________________

ГЛ. 13

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

| SELECT * |

| FROM Salespeople |

| WHERE city IN |

| (SELECT city |

| FROM Customers); |

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

| cnum cname city comm |

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

| 1001 Peel London 0.12 |

| 1002 Serres San Jose 0.13 |

| 1004 Motika London 0.11 |

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

Рисунок 13. 2: Использование IN в качестве альтернативы к ANY

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

| SELECT * |

| FROM Salespeople |

| WHERE sname < ANY |

| (SELECT cname |

| FROM Customers); |

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

| cnum cname city comm |

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

| 1001 Peel London 0.12 |

| 1004 Motika London 0.11 |

| 1003 Axelrod New York 0.10 |

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

Рисунок 13. 3: Использование оператора ANY с оператором "неравно" ( < )

продавцов для их заказчиков которые упорядоченны в алфавитном

порядке ( вывод показан на Рисунке 13.3)

SELECT *

FROM Salespeople

WHERE sname < ANY

( SELECT cname

FROM Customers);

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

______________________________________________________________________

Все строки были выбраны для Serres и Rifkin, потому что нет других за-

казчиков чьи имена следовали бы за ими в алфавитном порядке.

Обратите внимание что это является d основнjм эквивалентом следую-

щему запросу с EXISTS, чей вывод показывается в Рисунке 13.4:

SELECT *

FROM Salespeople outer

WHERE EXISTS

( SELECT *

FROM Customers inner

WHERE outer.sname < inner.cname );

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

| SELECT * |

| FROM Salespeople outer |

| WHERE EXISTS |

| (SELECT * |

| FROM Customers inner |

| WHERE outer.sname < inner.cname); |

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

| cnum cname city comm |

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

| 1001 Peel London 0.12 |

| 1004 Motika London 0.11 |

| 1003 Axelrod New York 0.10 |

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

Рисунок 13.4 Использование EXISTS как альтернатива оператору ANY

Любой запрос который может быть сформулирован с ANY ( или, как мы

увидим, с ALL ), мог быть также сформулирован с EXISTS, хотя наоборот

будет неверно. Строго говоря, вариант с EXISTS не абсолютно идентичен

вариантам с ANY или с ALL из-за различия в том как обрабатываются пус-

тые( NULL ) значения ( что будет обсуждаться позже в этой главе ). Тем ни

менее, с технической точки зрения, вы могли бы делать это без ANY и ALL

если бы вы стали очень находчивы в использовании EXISTS ( и IS NULL ).

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