РУКОВОДСТВО ПО РЕЛЯЦИОННОЙ СУБД DB2

         

ПОДЗАПРОС С НЕСКОЛЬКИМИ УРОВНЯМИ ВЛОЖЕННОСТИ


Выдать фамилии поставщиков, которые поставляют по крайней мере одну красную деталь.

SELECT                ФАМИЛИЯ

FROM                   S

WHERE                НОМЕР_ПОСТАВЩИКА IN

(SELECT НОМЕР_ПОСТАВЩИКА

FROM              SP

WHERE           НОМЕР_ДЕТАЛИ IN

(SELECT НОМЕР_ДЕТАЛИ

FROM P

WHERE ЦВЕТ = 'Красный'));

Результат:

ФАМИЛИЯ

  Смит

  Джонс

  Кларк

Пояснение.

Результатом самого внутреннего подзапроса является множество ('Р1, 'Р4', 'Р6'). Подзапрос следующего уровня в свою очередь дает в результате множество ('S1', 'S2', 'S4'). Последний, самый внешний SELECT, вычисляет приведенный выше окончательный результат. Вообще допускается любая глубина вложенности подзапросов.

Для того чтобы убедиться в Вашем понимании этого примера, попытайтесь выполнить следующие упражнения:

а) Перепишите данный запрос так, чтобы все уточнения имен были указаны явным образом.

б) Напишите эквивалентную формулировку этого же запроса с использованием соединения.



Содержание раздела