Subqueries
Запрос может использовать результат другого запроса
Иногда нужное условие или значение невозможно удобно выразить одной плоской выборкой. Тогда один SELECT можно вложить в другой и использовать его результат как часть внешнего запроса.
В этом разделе мы разберём подзапросы от простых скалярных выражений до зависимых запросов, а затем перейдём к CTE — именованным промежуточным наборам, которые помогают читать и строить более сложный SQL.
Что будет внутри раздела
- Основы подзапросов. Поймём, где может находиться вложенный запрос и как внешний запрос использует его результат.
- Скалярные подзапросы. Разберём подзапрос, который должен вернуть одно значение.
- Подзапросы в WHERE. Научимся использовать результат вложенной выборки для фильтрации строк.
- EXISTS и NOT EXISTS. Проверим не конкретное значение, а сам факт существования подходящей строки.
- Коррелированные подзапросы. Увидим запросы, в которых внутренняя часть зависит от текущей строки внешней выборки.
- CTE. Вынесем промежуточную выборку в именованный блок
WITH. - Recursive CTE. Познакомимся с рекурсивными вычислениями для иерархий и последовательностей.
Главная цель — не научиться «вкладывать SELECT в SELECT», а понимать форму результата каждой части запроса и то, как этот результат используется на следующем уровне.