Database Programming & Design



         

The SQL Double Double - часть 4


Рассмотрим следующий запрос:

SELECT DISTINCT MAJOR <----- Верхний запрос

FROM PARTS T1

WHERE NOT EXISTS

(SELECT * <----- Средний запрос

FROM QUE T2

WHERE NOT EXISTS

(SELECT * <----- Нижний запрос

FROM PARTS T3

WHERE T1.MAJOR=T3.MAJOR

AND T3.MINOR=T2.ID))

Таблицы имеют следующую структуру и содержание:

Таблица PARTS Таблица QUE

10000000 строк 2 строки

MAJOR MINOR ID

----- ----- --

10 1 1

10 2 3

10 3

11 2

11 3

12 1

12 3

12 4

В этом запросе выполняется деление всех значений столбца ID

таблицы QUE на значения столбца MINOR таблицы PARTS. Запрос

возвращает все значения столбца MAJOR, для каждого из которых

набор значений столбца MINOR включает по меньшей мере все

значения столбца ID таблицы QUE. Запрос вычисляется следующим

образом: в верхнем запросе выбирается строка со значением столбца

MAJOR, равным 10. Это значение передается в нижний запрос.

Выполняется средний запрос, выбирается строка со значением

столбца ID, равным 1, и это значение передается в нижний запрос.

Поскольку результатом нижнего запроса является true, продолжает

работать средний запрос и передает нижнему запросу значение id,

равное 3. Нижний запрос опять дает значение true, но у среднего

запроса больше нет строк, поэтому он вырабатывает значение true,

и 10 помещается в окончательный результат. На следующем шаге

нижний запрос получает значение MAJOR, равное 11, и значение ID,

равное 3. Поскольку нижний запрос вычисляется в false, средний

запрос вычисляется в true, и это не дает возможности поместить 11

в результирующий набор. Аналогичные рассуждения показывают, что

12 войдет в результирующий набор.

Средний запрос может также передавать информацию из нескольких

соединенных вместе таблиц, например, список всех элементов

почтовых заказов от калифорнийских клиентов. Можно проверить

каждого поставщика на предмет того, поставляет ли он по меньшей

мере все эти элементы. Следующий запрос позволяет найти всех

поставщиков, которые поставляют по меньшей мере все товары,




Содержание  Назад  Вперед