Занятие 22. Операторы JOIN и UNION
⚡ Кратко: примеры
- Объединение имён клиентов и сотрудников через
UNION ALL. - Соединение
order_detailsсproductsдля получения имён продуктов. - Многотабличный
LEFT JOINсpurchase_orders.
💻 Рабочие примеры
Пример 1. UNION ALL с пометкой источника
USE northwind;
SELECT first_name, last_name, 'employee' AS source
FROM employees
UNION ALL
SELECT first_name, last_name, 'customer' AS source
FROM customers;
Возвращает все имена и фамилии из обеих таблиц с указанием, сотрудник это или клиент.
Пример 2. INNER JOIN: имена продуктов в заказах
USE northwind;
SELECT od.order_id, p.product_name
FROM order_details AS od
INNER JOIN products AS p
ON od.product_id = p.id;
Показывает идентификаторы заказов и названия продуктов вместо числовых product_id.
Пример 3. COUNT с JOIN и GROUP BY
USE northwind;
SELECT p.product_name, COUNT(od.order_id) AS order_count
FROM order_details AS od
INNER JOIN products AS p
ON od.product_id = p.id
GROUP BY p.product_name;
Считает, сколько раз каждый продукт встречается в заказах.
Пример 4. LEFT JOIN + LEFT JOIN: сохраняем все строки order_details
USE northwind;
SELECT od.order_id, p.product_name, po.payment_amount
FROM order_details AS od
LEFT JOIN products AS p
ON od.product_id = p.id
LEFT JOIN purchase_orders AS po
ON od.purchase_order_id = po.id;
Выводит все строки order_details. Если продукт или закупка неизвестны, в соответствующих столбцах будет NULL.
Пример 5. Сравнение INNER, LEFT, RIGHT JOIN
USE northwind;
-- Только сотрудники с привилегиями
SELECT *
FROM employees AS e
INNER JOIN employee_privileges AS ep
ON e.id = ep.employee_id;
-- Все сотрудники, даже без привилегий
SELECT *
FROM employees AS e
LEFT JOIN employee_privileges AS ep
ON e.id = ep.employee_id;
-- Все привилегии, даже без сотрудников (редкий случай)
SELECT *
FROM employees AS e
RIGHT JOIN employee_privileges AS ep
ON e.id = ep.employee_id;
Проверить по документации: в учебных заданиях предполагается схема
northwind с конкретными именами столбцов. В реальных базах northwind имена могут отличаться.