Занятие 23. Практикум 6
⚡ Кратко: примеры
- Объединение компаний из трёх таблиц.
- Поиск сотрудников без привилегий.
- Расшифровка заказов через LEFT JOIN.
💻 Разбор типовых запросов
Пример 1. Объединение компаний из трёх таблиц
USE northwind;
SELECT company FROM employees
UNION ALL
SELECT company FROM customers
UNION ALL
SELECT company FROM suppliers;
Выводит общий список названий компаний. Поскольку названия могут повторяться, UNION ALL быстрее, чем UNION.
Пример 2. Поиск сотрудников без привилегий
USE northwind;
SELECT e.first_name, e.last_name
FROM employees AS e
LEFT JOIN employee_privileges AS ep
ON e.id = ep.employee_id
WHERE ep.employee_id IS NULL;
LEFT JOIN сохраняет всех сотрудников. Те, у кого нет записи в employee_privileges, получат NULL в столбцах правой таблицы. Фильтр IS NULL оставляет только таких сотрудников.
Пример 3. Расшифровка заказа с LEFT JOIN
USE northwind;
SELECT o.id, e.first_name AS employee, c.company_name AS customer,
s.company AS shipper
FROM orders AS o
LEFT JOIN employees AS e
ON o.employee_id = e.id
LEFT JOIN customers AS c
ON o.customer_id = c.id
LEFT JOIN shippers AS s
ON o.shipper_id = s.id
WHERE o.ship_city = 'Seattle';
LEFT JOIN важен, потому что в реальной базе у некоторых заказов могут отсутствовать сотрудники, клиенты или перевозчики. INNER JOIN скрыл бы такие заказы.
Пример 4. Подсчёт транзакций по типу с фильтром
USE northwind;
SELECT itt.type_name, COUNT(*) AS transaction_count
FROM inventory_transactions AS it
JOIN inventory_transaction_types AS itt
ON it.transaction_type = itt.id
JOIN products AS p
ON it.product_id = p.id
WHERE itt.type_name NOT LIKE '%Sold%'
GROUP BY itt.type_name;
Фильтр WHERE отбрасывает типы со словом Sold до группировки. COUNT(*) считает оставшиеся транзакции.