JOIN - об'єднання таблиць

Навіщо потрібен JOIN?

JOIN дозволяє об'єднувати дані з кількох таблиць в одному запиті. Це основа реляційних баз даних.

Типи JOIN

INNER JOIN

Тільки співпадіння

LEFT JOIN

Всі з лівої + співпадіння

RIGHT JOIN

Всі з правої + співпадіння

FULL JOIN

Всі з обох таблиць

INNER JOIN

Повертає тільки записи, які мають співпадіння в обох таблицях:

SELECT users.name, orders.total
FROM users
INNER JOIN orders ON users.id = orders.user_id;

LEFT JOIN

Повертає всі записи з лівої таблиці + співпадіння з правої:

SELECT users.name, orders.total
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

Користувачі без замовлень отримають NULL в колонці total.

RIGHT JOIN

Повертає всі записи з правої таблиці + співпадіння з лівої:

SELECT users.name, orders.total
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

FULL OUTER JOIN

Повертає всі записи з обох таблиць:

SELECT users.name, orders.total
FROM users
FULL OUTER JOIN orders ON users.id = orders.user_id;

Псевдоніми таблиць

Для скорочення використовуй псевдоніми:

SELECT u.name, o.total
FROM users u
JOIN orders o ON u.id = o.user_id;

JOIN кількох таблиць

SELECT u.name, o.total, p.name AS product_name
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN order_items oi ON o.id = oi.order_id
JOIN products p ON oi.product_id = p.id;

JOIN з умовами

SELECT u.name, o.total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.total > 1000
ORDER BY o.total DESC;
Порада: JOIN без ON поверне декартів добуток (всі комбінації). Завжди вказуй умову ON!

Форматування SQL

Best Practice: Форматуй SQL запити для читабельності:
  • Кожен clause (SELECT, FROM, JOIN, WHERE) на новому рядку
  • Використовуй відступи для вкладених елементів
  • Ключові слова ВЕЛИКИМИ літерами

Практика

Спробуй в SQL пісочниці:

SELECT
    u.name,
    o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
SELECT
    u.name,
    o.total
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

У наступному уроці навчимося агрегувати дані.

Наступний урок: Агрегатні функції →