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

Занятие 22. Операторы JOIN и UNION

📁 Блок: SQL / MySQL / Связи и JOIN ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#select #from #join #union

⚡ Кратко: команды занятия

  • SELECT ... FROM t1 INNER JOIN t2 ON ...
  • SELECT ... FROM t1 LEFT JOIN t2 ON ...
  • SELECT ... FROM t1 RIGHT JOIN t2 ON ...
  • SELECT ... FROM t1 CROSS JOIN t2
  • SELECT ... UNION [ALL] SELECT ...

🔖 Справочник операторов

INNER JOIN

SELECT *
FROM employees AS e
INNER JOIN employee_privileges AS ep
  ON e.id = ep.employee_id;

Возвращает только сотрудников, у которых есть записи в employee_privileges.

LEFT JOIN

SELECT *
FROM employees AS e
LEFT JOIN employee_privileges AS ep
  ON e.id = ep.employee_id;

Возвращает всех сотрудников. Для тех, у кого нет привилегий, столбцы из employee_privileges будут NULL.

RIGHT JOIN

SELECT *
FROM employees AS e
RIGHT JOIN employee_privileges AS ep
  ON e.id = ep.employee_id;

Возвращает все записи из employee_privileges и подходящих сотрудников.

CROSS JOIN

SELECT *
FROM products AS p
CROSS JOIN categories AS c;

Каждый продукт соединяется с каждой категорией. Результат: count(products) × count(categories) строк.

UNION

SELECT first_name, last_name FROM employees
UNION
SELECT first_name, last_name FROM customers;

Общая выборка имён и фамилий без дубликатов.

UNION ALL

SELECT first_name, last_name, 'employee' AS status
FROM employees
UNION ALL
SELECT first_name, last_name, 'customer' AS status
FROM customers;

Общая выборка с пометкой источника каждой строки. Дубликаты сохраняются.

Многотабличный JOIN

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;

🔗 Полный справочник

Более полный каталог SQL-операторов курса — в справочнике SQL.