Что такое подзапрос в SQL?

«Что такое подзапрос в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Подзапрос (subquery) — это SQL-запрос, вложенный в другой запрос (основной оператор SELECT, INSERT, UPDATE, DELETE). Он выполняется первым, а его результат используется внешним запросом в качестве условия, источника данных или вычисляемого значения.

Основные типы и использование:

  • В предложении WHERE / HAVING — для фильтрации по результату подзапроса.
  • В предложении FROM — как временная таблица (алиас обязателен).
  • В предложении SELECT — как вычисляемый столбец (должен возвращать одно значение).

Пример (некоррелированный подзапрос):

-- Найти всех сотрудников из отделов, расположенных в Нью-Йорке
SELECT name, department_id
FROM employees
WHERE department_id IN (
    SELECT id
    FROM departments
    WHERE location = 'New York'
);

Пример (коррелированный подзапрос):

-- Найти сотрудников с зарплатой выше средней по их отделу
SELECT e.name, e.salary, e.department_id
FROM employees e
WHERE e.salary > (
    SELECT AVG(salary)
    FROM employees
    WHERE department_id = e.department_id
);

Ключевое различие:

  • Некоррелированный выполняется один раз независимо от внешнего запроса.
  • Коррелированный выполняется для каждой строки внешнего запроса (может быть менее производительным).