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

В этом руководстве вы узнаете о коррелированном подзапросе SQL Server, который представляет собой подзапрос, зависящий от внешнего запроса в отношении своих значений.

Введение в коррелированный подзапрос SQL Server

Коррелированный подзапрос — это подзапрос, который использует значения внешнего запроса. Другими словами, коррелированный подзапрос зависит от внешнего запроса для своих значений.

Из-за этой зависимости коррелированный подзапрос не может быть выполнен независимо как простой подзапрос.

Более того, коррелированный подзапрос выполняется повторно, один раз для каждой строки, оцененной внешним запросом. Коррелированный подзапрос также известен как повторяющийся подзапрос.

Рассмотрим следующую таблицу продуктов из образца базы данных :

продукты

В следующем примере находят продукты, цена по прейскуранту которых равна максимальной цене по прейскуранту продуктов в той же категории:

SELECT
    product_name,
    list_price,
    category_id
FROM
    production.products p1
WHERE
    list_price IN(
        SELECT
            MAX(p2.list_price)
        FROM
            production.products p2
        WHERE
            p2.category_id = p1.category_id
        GROUP BY
            p2.category_id
    )
ORDER BY
    category_id,
    product_name;

Вот результат:

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

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

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

Как видите, коррелированный подзапрос выполняется один раз для каждого продукта, оцененного внешним запросом.

Краткое содержание

  • Коррелированный подзапрос — это подзапрос, который использует значения внешнего запроса.
Мирослав С.

Автор статей, ИБ-специалист