Subqueries

Базовый SQL
≈ 1 мин чтения

Запрос может использовать результат другого запроса

Иногда нужное условие или значение невозможно удобно выразить одной плоской выборкой. Тогда один SELECT можно вложить в другой и использовать его результат как часть внешнего запроса.

В этом разделе мы разберём подзапросы от простых скалярных выражений до зависимых запросов, а затем перейдём к CTE — именованным промежуточным наборам, которые помогают читать и строить более сложный SQL.

Что будет внутри раздела

  • Основы подзапросов. Поймём, где может находиться вложенный запрос и как внешний запрос использует его результат.
  • Скалярные подзапросы. Разберём подзапрос, который должен вернуть одно значение.
  • Подзапросы в WHERE. Научимся использовать результат вложенной выборки для фильтрации строк.
  • EXISTS и NOT EXISTS. Проверим не конкретное значение, а сам факт существования подходящей строки.
  • Коррелированные подзапросы. Увидим запросы, в которых внутренняя часть зависит от текущей строки внешней выборки.
  • CTE. Вынесем промежуточную выборку в именованный блок WITH.
  • Recursive CTE. Познакомимся с рекурсивными вычислениями для иерархий и последовательностей.

Главная цель — не научиться «вкладывать SELECT в SELECT», а понимать форму результата каждой части запроса и то, как этот результат используется на следующем уровне.