Теория· 6 мин· 10 XP
Что такое подзапрос
Подзапрос (subquery) — это запрос, вложенный внутрь другого запроса. Заключается в скобки и может быть в любом месте, где ожидается значение или таблица.
Скалярный подзапрос — возвращает одно значение
Используем там, где нужно одно число или строка:
sql
-- Сотрудники с зарплатой выше средней по компании
SELECT id, name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees)
ORDER BY salary DESC;
Подзапрос в SELECT
Добавляем вычисленное значение как отдельный столбец:
sql
SELECT
e.id,
e.name,
e.salary,
(SELECT ROUND(AVG(e2.salary)) FROM employees e2) AS company_avg
FROM employees e
ORDER BY e.id;
Подзапрос в FROM (производная таблица)
Результат подзапроса можно использовать как таблицу:
sql
SELECT dept_id, max_sal
FROM (
SELECT dept_id, MAX(salary) AS max_sal
FROM employees
GROUP BY dept_id
) AS dept_max
ORDER BY max_sal DESC;
Когда подзапрос удобнее JOIN
| Ситуация | Инструмент |
|---|---|
| Сравнить с агрегатом (avg, max) | скалярный подзапрос |
| Проверить принадлежность к множеству | IN с подзапросом |
| Объединить строки двух таблиц | JOIN |
| Часто используется и сложный | CTE (WITH) |
Прочитайте урок до конца — прогресс засчитается автоматически