Ответ
Подзапрос — это запрос, вложенный в другой SQL-запрос. Он может использоваться в различных частях основного запроса.
Пример 1: Подзапрос в условии WHERE (с IN) Найти всех сотрудников, которые работают в отделах, расположенных в Лондоне.
SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location_id = 'LON' -- Предположим, 'LON' это код Лондона
);
Пример 2: Коррелированный подзапрос в SELECT Для каждого сотрудника вывести его зарплату и среднюю зарплату по его отделу.
SELECT
employee_id,
first_name,
salary,
(
SELECT AVG(salary)
FROM employees e2
WHERE e2.department_id = e1.department_id
) AS avg_department_salary
FROM employees e1;
Пример 3: Подзапрос как производная таблица (в FROM) Найти отделы со средней зарплатой выше средней по компании.
SELECT department_id, avg_sal
FROM (
SELECT department_id, AVG(salary) AS avg_sal
FROM employees
GROUP BY department_id
) AS dept_avg
WHERE avg_sal > (
SELECT AVG(salary) FROM employees
);
Ключевой момент: Подзапросы в WHERE и SELECT должны возвращать один столбец (или одно скалярное значение). Подзапрос в FROM должен иметь псевдоним (AS dept_avg).