Learnly
SQL для аналитиков/Глава 7/Урок 2

JOIN: соединяем таблицы

JOIN: соединяем таблицы

JOIN, один из самых мощных и важных инструментов SQL. Он позволяет соединять данные из нескольких таблиц в один результат.

Зачем JOIN

У нас есть таблица orders и customers. В orders хранится только customer_id. Чтобы узнать имя клиента, нужно "соединить" таблицы по этому ключу.

INNER JOIN, только совпадающие строки

SELECT
    o.id          AS order_id,
    c.name        AS customer,
    c.city,
    o.amount
FROM orders o
INNER JOIN customers c ON o.customer_id = c.id;

o и c, псевдонимы таблиц. ON указывает по какому условию соединять.

Результат, только заказы у которых есть клиент, и только клиенты у которых есть заказы.

LEFT JOIN, все строки из левой таблицы

-- Все клиенты, даже без заказов
SELECT
    c.name,
    COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY c.id, c.name;

Клиенты без заказов тоже попадут в результат, у них order_count = 0.

Разница INNER vs LEFT

customers: Алекс, Мария, Дмитрий
orders:    заказы от Алекса и Марии (у Дмитрия нет)

INNER JOIN → Алекс, Мария (Дмитрий выброшен)
LEFT JOIN  → Алекс, Мария, Дмитрий (NULL в полях заказа)

JOIN трёх таблиц

SELECT
    o.id           AS order_id,
    c.name         AS customer,
    p.name         AS product,
    oi.quantity,
    oi.price
FROM orders o
JOIN customers c    ON o.customer_id = c.id
JOIN order_items oi ON oi.order_id = o.id
JOIN products p     ON oi.product_id = p.id
ORDER BY o.id;

Каждый JOIN добавляет ещё одну таблицу к результату.

COALESCE, замена NULL

SELECT
    name,
    COALESCE(phone, 'не указан')  AS phone
FROM users;

COALESCE возвращает первый не-NULL аргумент. Удобно для замены NULL на читаемое значение.

💡 Главная мысль: INNER JOIN, только совпадения. LEFT JOIN, все строки из левой таблицы, даже без пары. Самая частая ошибка, потеря строк из-за NULL в ключе соединения.