Коррелированные подзапросы — это подзапросы, которые зависят от основного запроса. Они ссылаются на данные из внешней части и выполняются для каждой строки основного запроса. Звучит сложно? На самом деле, это как если подзапрос "спрашивает" у основной таблицы: "Эй, для этой строки дай мне нужное значение!". Давайте разберём на простом примере.
1️⃣ Будем работать с таблицей employees (сотрудники в компании):
Таблица: employees
id | name | department | salary
1 Ваня IT 50000
2 Таня IT 60000
3 Петя Sales 40000
4 Саша Sales 55000
5 Маша HR 45000
6 Коля IT 70000
2️⃣ Пример в блоке WHERE: Найдем сотрудников с зарплатой выше средней в своём отделе.
SELECT
id,
name,
department,
salary
FROM
employees as e
WHERE
salary > (SELECT AVG(salary) FROM employees WHERE department = e.department);
3️⃣ Как работает?
• Для каждой строки e подзапрос берёт её department (например, IT для Вани) и считает среднюю зарплату только по этому отделу ((50000 + 60000 + 70000)/3 = 60000). Если salary строки > этой средней — она попадет в результат.
Итог:
Коррелированные подзапросы — для случаев, когда нужно "персонализированное" вычисление по строке, как сравнение со средней в группе. Выбирайте их, когда join усложняет запрос и данных в таблице не много.
🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ А вы использовали коррелированные подзапросы в своих задачах? Какие реальные задачи вы решали корреляциями? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.
@dima_sqlit