Коррелированные подзапросы

Оценить
(1 голос)

Подзапросы называются коррелированными подзапросами, если внутренний запрос зависит от внешнего запроса для всех его значений. В примере 6.65 показан коррелированный подзапрос.

 

Коррелированные подзапросы

Коррелированные подзапросы

 

Внутренний запрос в примере 6.65 должен логически выполняться много раз, потому что он содержит столбец emp_no, который принадлежит таблице employee во внешнем запросе, и значение столбца emp_no изменяется каждый раз, когда Database Engine проверяет другую строку таблицы employee во внешнем запросе.

Давайте посмотрим, как система может обрабатывать запрос в примере 6.65. Во-первых, система отыскивает первую строку в таблице employee (для внешнего запроса) и сравнивает номер служащего в этом столбце (25 348) со значениями столбца workson.empno во внутреннем запросе. Так как projectno для этого служащего имеет только одно значение и равен р2, внутренний запрос возвращает р2. Это единственное значение во множестве не равно значению рЗ во внешнем запросе, следовательно, условие внешнего запроса (where 'р3' in ...) не выполнено, и ни одна строка не возвращается внешнему запросу для этого служащего. Затем система отыскивает следующую строку в таблице employee и повторяет сравнение номеров служащих в обеих таблицах. Второй служащий имеет две строки в таблице workson со значениями pi и рЗ столбца project_no, следовательно, результирующим множеством внутреннего запроса является (pi, р2). Один из элементов результирующего набора равен значению рЗ, так что условие возвращает истинное значение, и отображается соответствующее значение столбца empiname из второй строки (Jones). Тот же процесс применяется ко всем строкам таблицы employee; окончательным результатом будет набор из трех найденных строк.

Другие примеры коррелированных подзапросов будут приведены в следующем разделе.


Подзапросы и функция EXISTS
Должны вы использовать соединения или подзапросы?
Преимущества подзапросов
Преимущества соединений
Табличные выражения

Добавить комментарий


Защитный код
Обновить

© 2018 www.serversql.ru. Все права защищены.