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

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

Ответ

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

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

  • Скалярный подзапрос (возвращает одно значение):
    SELECT name FROM employees
    WHERE salary > (SELECT AVG(salary) FROM employees);
  • Подзапрос, возвращающий множество строк (используется с IN, ANY, ALL):
    SELECT name FROM departments
    WHERE id IN (SELECT department_id FROM projects WHERE budget > 100000);
  • Подзапрос в качестве таблицыFROM):
    SELECT dept_name, avg_sal
    FROM (SELECT department_id, AVG(salary) as avg_sal FROM employees GROUP BY department_id) AS dept_stats
    WHERE avg_sal > 50000;

Коррелированные vs. Некоррелированные:

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

Производительность: Часто подзапрос можно переписать с использованием JOIN, что может быть эффективнее, особенно для коррелированных подзапросов. Выбор зависит от оптимизатора СУБД и структуры данных.