Анализ данных  • 07 октября 2025 • 5 мин чтения

Как работает SQL JOIN: основные типы и примеры

SQL — основной язык работы с базами данных. В аналитике он нужен, чтобы связывать таблицы, для этого используют операции JOIN. Рассказываем о них подробнее.

Что такое SQL Join

В бизнесе редко бывает, что вся информация всех отделов хранится в одной таблице. Зачастую это разные документы. SQL Join — это способ, благодаря которому можно соединить данные из разных таблиц в одну выборку. Можно сказать, что JOIN — это мост между таблицами.

Например, таблица customers хранит информацию о клиентах: имя, город, дата регистрации. А таблица orders хранит данные о заказах: сумма, дата, клиент, который сделал заказ. По отдельности эти таблицы полезны, но аналитик не сможет узнать, какой клиент сделал какой заказ, пока не объединит их. Именно здесь и помогает инструмент JOIN.

Для аналитиков, которые хотят развиваться в профессии, SQL — обязательный навык. Освоить его можно за три месяца на курсе «SQL для работы с данными и аналитики». За время обучения студенты создают проекты на основе реальных данных и практикуются в специальном тренажёре.

Зачем нужны операции соединения в SQL

В базах данные нормализованы — то есть преобразованы так, чтобы они занимали меньше места, а поиск по элементам был быстрым и результативным. Данные разнесены по сущностям: например, покупатели, доставки, продукция, отделы, кампании. JOIN позволяет:

  • собрать целостную картину — клиент + его заказы;
  • посчитать метрики— LTV, средний чек, ROMI — из разных источников;
  • строить витрины и отчёты без денормализации исходных таблиц;
  • находить аномалии — заказы без клиентов, клиентов без активностей.
  • Без JOIN SQL аналитик был бы ограничен только одной таблицей. А бизнес устроен так, что данные всегда распределены между несколькими таблицами.

    Основные типы JOIN в SQL

    Существует несколько основных видов соединения. Рассмотрим их подробнее.

  • INNER JOIN. В этом случае при соединении таблиц выбираются только строки, у которых есть совпадение по заданному условию. Так, при связи таблиц с данными о покупателях и заказах в результат попадут только те клиенты, у которых есть хотя бы один заказ. Если покупок нет — клиент в итоговой выборке отображаться не будет.
  • LEFT JOIN (или LEFT OUTER JOIN). Здесь в выборке будут только записи из левой таблицы. А из правой к ним присоединятся только строки, которые совпадают по условию. Если не совпадают — будет NULL.
  • RIGHT JOIN (или RIGHT OUTER JOIN). Аналогично LEFT JOIN, но в приоритете — правая таблица.
  • FULL JOIN (или FULL OUTER JOIN). Используются строки из обеих таблиц. Там, где есть совпадения, данные объединяются, а где связи нет — незаполненные поля заменяются NULL. Например, можно получить общий список всех клиентов и всех заказов: часть клиентов может быть без покупок, а часть заказов — без привязки к клиенту.
  • Главные типы соединений JOIN SQL

    На схеме видно, по какой логике соединяются данные из столбцов при разных JOIN SQL

    Дополнительные методы соединения

    Помимо основных JOIN в SQL существуют и другие способы соединять данные.

  • CROSS JOIN. Связь, при которой каждая запись из первой таблицы комбинируется с каждой записью из второй. Это называется декартовым произведением. Если в одной таблице десять строк, а в другой 20, результат даст 200 строк. Такой тип запроса используют нечасто, потому что итоговая выборка быстро разрастается и может сильно нагрузить базу данных.
  • SELF JOIN. Таблица соединяется сама с собой. Это нужно, когда строки в ней связаны друг с другом. Например, в таблице сотрудников у каждого может быть поле manager_id. Соединив таблицу с самой собой по этому полю, можно понять, кто является начальником конкретного сотрудника.
  • CROSS и SELF — ещё два метода соединения в JOIN SQL

    Примеры SQL Join в действии

    Рассмотрим, как работает SQL Join, на примере данных о клиентах и заказах. Есть две таблицы:

    customers

    customer_id

    name

    1
    Анна
    2
    Иван
    3
    Мария

    orders

    Используем INNER JOIN. Бизнес-логика: посчитать выручку по клиентам, но учитывать только тех, у кого есть заказы.

    INNER JOIN покажет только те строки, которые присутствуют в обеих таблицах

    Вот что получится. Клиентов без заказов (Мария) нет в результате:

    name

    amount

    Анна
    500
    Иван
    700
    Иван
    300

    Пример с LEFT JOIN с использованием тех же данных. Бизнес-логика: из отчёта CRM показать всех покупателей и суммы их покупок, если заказов нет — будет NULL.

    LEFT JOIN возьмёт все строки из одной таблицы, а из другой подтянет только совпадающие

    Вот что получится:

    name

    amount

    Анна
    500
    Иван
    700
    Иван
    300
    Мария
    NULL

    Пример с RIGHT JOIN. Здесь рассмотрим другую бизнес-логику: сверка маркетинга, запланированные кампании и фактические отклики. Хотим увидеть:

  • кампании без откликов;
  • отклики по незанесённым кампаниям. 
  • Для анализа есть две таблицы: 

    campaigns (план)

    campaign_id

    campaign_name

    10
    Весеннее промо
    20
    Летняя распродажа

    responses (факт)

    Агрегируем отклики по кампании и «склеим» с планом FULL JOIN:

    Отклики и план по кампаниям можно соединить с помощью FULL JOIN

    Результат

    Смысл:

  • id=20 — кампания запланирована, но откликов нет;
  • id=30 — есть отклики, но кампании нет в плане (данные не синхронизированы). 
  • SELF JOIN рассмотрим на примере данных о руководителях и подчинённых.

    Такие таблицы встречаются в реальной работе. Тут Анна (CEO) — руководитель верхнего звена. Ей подчиняются Борис и Света. Подчинённые Бориса — Дима и Ева, а подчинённый Светы — Фёдор.

    Применим такой код:

    Таблица при SELF JOIN соединяется сама с собой

    Результат:

    Частые ошибки и лучшие практики

    Рассмотрим ошибки с SQL JOIN подробно и с примерами. Так будет понятно, что может пойти не так и как этого избежать.

  • Пропуск условия соединения. Новички часто пишут запрос без условия соединения (ON). Получится декартово произведение: каждая строка из таблицы customers соединится с каждой строкой из orders. Если в одной таблице 100 строк, в другой — 1000, в итоге будет 100 000 строк. Это приведёт к перегрузке базы и даст бессмысленный результат. Нужно всегда указывать явное условие.
  • Частая ошибка — не писать условие соединения (ON)

  • Соединение по неправильному полю. Новичок может случайно соединить таблицы по полям с одинаковыми названиями, но с разным смыслом. Например, в таблице customers поле id — это идентификатор клиента. В таблице orders поле id — это идентификатор заказа. Результат будет неверным, если написать
  • JOIN orders o ON c.id = o.id

    Так связываются не клиент и его заказы, а просто совпадения по одинаковым числам. Нужно соединять всегда по ключам, которые отражают логику данных:

    JOIN orders o ON c.customer_id = o.customer_id

    Фильтр по правой таблице в WHERE «ломает» LEFT JOIN. Нужно переносить такие условия в ON, иначе строки с NULL исчезнут.

    LEFT JOIN orders o
    ON o.customer_id = c.customer_id
    AND o.amount > 500;

    Совет эксперта

    Александр Вальд

    Сужайте набор раньше — используйте фильтры в ON/WHERE, предварительные CTE/подзапросы. Вместо того чтобы сначала заджойнить все нужные таблицы и после фильтровать, стоит подумать, есть ли возможность каждую из таблиц уменьшить до джойна. И объединять уже небольшие таблицы. Избегайте SELECT* — берите только нужные столбцы. Документируйте сложные соединения — комментарии поясняют бизнес-логику. Помните, что JOIN — одна из самых распространённых операций в SQL. Её знание обязательно проверяют на техническом собеседовании.
    Статью подготовили:
    Александр Вальд
    Яндекс Практикум
    Старший наставник курса «Аналитик данных», продакт-менеджер на стримах парсинга и доказательной аналитики Aplaut.com, основатель компании в сфере аналитики Wilde.tech
    Надежда Низамова
    Яндекс Практикум
    Редактор
    Анастасия Павлова
    Яндекс Практикум
    Иллюстратор

    Подпишитесь на наш ежемесячный дайджест статей —
    а мы подарим вам полезную книгу про обучение!

    Поделиться
    Пройдите бесплатные части курсов в Практикуме, чтобы сделать осознанный выбор профессии
    Mon Nov 17 2025 15:54:38 GMT+0300 (Moscow Standard Time)