SQLLab
Теория· 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)

Прочитайте урок до конца — прогресс засчитается автоматически