Занятие 23. Практикум 6
⚡ Кратко: домашнее задание
- Найдите клиентов без заказов.
- Посчитайте количество заказов у каждого сотрудника.
- Объедините продукты и закупки одним запросом.
🏠 Домашнее задание
Все задания выполняются в базе northwind. Они дополняют практикум и готовят к summary session.
Задание 1. Клиенты без заказов
Выведите имена и фамилии клиентов из таблицы customers, у которых нет ни одного заказа в таблице orders.
Пошаговое решение
Соединяем customers с orders через LEFT JOIN и ищем строки, где orders.id IS NULL.
USE northwind;
SELECT c.first_name, c.last_name
FROM customers AS c
LEFT JOIN orders AS o
ON c.id = o.customer_id
WHERE o.id IS NULL;
Задание 2. Количество заказов у каждого сотрудника
Для каждого сотрудника выведите имя и количество заказов, которые он оформил. Включите сотрудников без заказов — у них должно быть 0.
Пошаговое решение
USE northwind;
SELECT e.first_name, e.last_name, COUNT(o.id) AS order_count
FROM employees AS e
LEFT JOIN orders AS o
ON e.id = o.employee_id
GROUP BY e.id, e.first_name, e.last_name;
Примечание: COUNT(o.id) возвращает 0 для сотрудников без заказов, потому что COUNT не считает NULL.
Задание 3. Объединение продуктов и закупок
Выведите одним запросом названия продуктов из таблицы products и названия продуктов из таблицы purchase_orders (столбец inventory_id можно заменить на название продукта через JOIN, если связь существует). Добавьте столбец, показывающий источник строки.
Пошаговое решение
Предположим, что purchase_orders связана с products через inventory_id:
USE northwind;
SELECT p.product_name, 'product' AS source
FROM products AS p
UNION ALL
SELECT p.product_name, 'purchase_order' AS source
FROM purchase_orders AS po
JOIN products AS p
ON po.inventory_id = p.id;
Задание 4. Заказы с расшифровкой статуса
В таблице orders есть столбец status_id. Расшифруйте его значения через таблицу orders_status, если она есть в базе. Выведите идентификатор заказа и название статуса.
Пошаговое решение
USE northwind;
SELECT o.id, os.status_name
FROM orders AS o
LEFT JOIN orders_status AS os
ON o.status_id = os.id;
orders_status отсутствует, задание следует адаптировать под доступные таблицы.