← К оглавлению занятия

Занятие 25. Подзапросы

📁 Блок: SQL / MySQL / Подзапросы и CTE ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#in #where #select #from

⚡ Кратко: примеры

  • Заказы клиентов из Лос-Анджелеса.
  • Топ-10 продуктов по количеству заказов.
  • Строки дороже средней цены.
  • Заказы Sales Representative.

💻 Рабочие примеры

Пример 1. Заказы клиентов из города

USE northwind;

SELECT *
FROM orders
WHERE customer_id IN (
    SELECT id FROM customers WHERE city = 'Los Angeles'
);

Подзапрос находит идентификаторы клиентов, внешний запрос — их заказы.

Пример 2. Топ-10 продуктов по заказам и выручке

USE northwind;

SELECT p.product_name, ps.total_orders, ps.total_revenue
FROM (
    SELECT product_id,
           COUNT(*) AS total_orders,
           SUM(unit_price * quantity) AS total_revenue
    FROM order_details
    GROUP BY product_id
) AS ps
JOIN products AS p ON ps.product_id = p.id
ORDER BY ps.total_orders DESC
LIMIT 10;

Подзапрос в FROM агрегирует данные; внешний запрос добавляет названия продуктов.

Пример 3. Строки дороже средней цены

USE northwind;

SELECT *
FROM order_details
WHERE unit_price > (
    SELECT AVG(unit_price) FROM order_details
);

Скалярный подзапрос возвращает среднее значение, с которым сравнивается каждая строка.

Пример 4. Заказы сотрудников с конкретной должностью

USE northwind;

SELECT *
FROM orders
WHERE employee_id IN (
    SELECT id FROM employees WHERE job_title = 'Sales Representative'
);

Многострочный подзапрос возвращает список id сотрудников; внешний запрос фильтрует заказы через IN.