условие существования, по одной за
условие существования, по одной за раз. Последним выполняется
нижний запрос, как обычно, возвращающий true, если удается найти
хотя бы одну строку, удовлетворяющую условию, и false, если не
удается найти ни одной такой строки. Вот пример запроса с двойной
корреляцией, в котором используются псевдонимы имен таблиц BLK1,
BLK2 и BLK3:
SELECT SNAME
FROM S BLK1
WHERE NOT EXISTS
(SELECT 1
FROM SP BLK2
WHERE BLK2.S# = 'S2'
AND NOT EXISTS
(SELECT 1
FROM SP BLK3
WHERE BLK3.S# = BLK1.S#
AND BLK3.P# = BLK2.P#))
Этот запрос выдает список поставщиков, поставляющих все детали,
поставляемые поставщиком S2. Всем процессом управляет верхний
список поставщиков (BLK1.S#). Один поставщик передается нижнему
запросу. Далее выполняется средний запрос, формирующий список
деталей, уточненных условием WHERE BLK2.S# = 'S2'. Одна деталь
(BLK2.P#) передается от среднего нижнему запросу. Затем
выполняется нижний запрос и возвращает true или false среднему
запросу. Если результатом нижнего запроса является true, средний
запрос передает нижнему другую деталь (BLK2.P#). Этот цикл
продолжается до тех пор, пока либо не встретится результат false,
либо не исчерпаются все детали. Если нет больше деталей, то это
означает, что результат среднего запроса пуст и верхнему запросу
передается false. Это является условием пропуска текущей строки
верхнего запроса в окончательный результат. В результирующее
множество попадет имя поставщика, поставляющего по меньшей мере
все те детали, что и поставщик S2.
Если в какой-то момент результатом нижнего запроса является
false, то среднему запросу разрешается выполняться, и он
возвращает верхнему запросу true. По этому поводу верхний запрос
выбирает следующего поставщика (BLK1.S#) и начинает заново весь
цикл. Этот процесс позволяет найти всех поставщиков, которые
поставляют по меньшей мере все детали, поставляемые поставщиком
S2.
Двойная корреляция с двойным условием NOT EXISTS представляет
мощный оператор реляционного деления.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий