Медиаблог /

JOIN в SQL: что это такое, виды и примеры для начинающих

19 августа 2026

JOIN в SQL: что это такое, виды и примеры для начинающих

SQL JOIN — оператор языка SQL, который объединяет строки из двух и более таблиц в единую выборку на основе условия соединения ON. Работает в реляционных базах данных — PostgreSQL, MySQL, Oracle — через внешний ключ (Foreign Key). Без JOIN аналитик ограничен одной таблицей и не может восстановить нормализованные данные. Шесть типов JOIN — INNER, LEFT, RIGHT, FULL OUTER, CROSS, SELF — спрашивают на 99% технических собеседований.

JOIN в SQL — схема соединения двух таблиц базы данных стрелкой-мостом

Что такое SQL JOIN и для чего он используется

JOIN в SQL — оператор языка (не функция и не команда), который строит «мост» между таблицами. Данные в реляционных БД нормализованы: клиенты хранятся в таблице customers, заказы — в orders. По отдельности каждая таблица даёт ограниченный ответ, вместе — полноценную аналитику. Базовый шаблон запроса:

image

Учитесь бесплатно за счёт государства

Экономия до 100 000 ₽ на любой программе

Выбрать курс

SELECT колонки

FROM таблица1

JOIN таблица2 ON таблица1.внешний_ключ = таблица2.первичный_ключ;

Почему данные хранятся в нескольких таблицах

Нормализация данных устраняет дублирование: название пива «БагБир» записывается один раз, а ссылка на него через идентификатор повторяется в нескольких строках. Это экономит память и ускоряет поиск. «Relate» — «связанный» — именно отсюда происходит слово «реляционная» база данных.

Нормализация требует JOIN для реконструкции полной картины: разбили данные на таблицы ради эффективности — собираем обратно ради анализа. Без него рейтинг покупок не скажет, кто и что купил.

Что такое Foreign Key и как он связывает таблицы

Внешний ключ (Foreign Key) — столбец, который хранит значение первичного ключа (Primary Key) другой таблицы. Типичное именование: beer_id, customer_id, order_id.

Пример: таблица участников содержит столбец beer_id, таблица пива — столбец id. Внешний ключ соединяет их:

ON participants.beer_id = beers.id

Именно внешний ключ — основа JOIN: по нему база данных находит совпадения между строками двух таблиц.

Виды JOIN в SQL: сводная таблица

Шесть типов JOIN покрывают все сценарии соединения таблиц:

Тип JOIN
Что возвращает
ON нужен
Типичный кейс
INNER JOIN Только совпавшие строки Да Заказы с данными клиента
LEFT JOIN Все строки левой таблицы + NULL для несовпавших Да Клиенты с заказами и без
RIGHT JOIN Все строки правой таблицы + NULL Да Заказы с клиентами и без
FULL OUTER JOIN Все строки обеих таблиц + NULL с обеих сторон Да Сверка плана с фактом
CROSS JOIN Все комбинации строк (N × M) Нет Матрица цвет × размер
SELF JOIN Строки из одной таблицы в двух ролях Да Иерархия сотрудников

INNER JOIN — внутреннее соединение

INNER JOIN возвращает строки, для которых найдено совпадение в обеих таблицах. Слово INNER необязательно: JOIN без уточнения — это и есть INNER JOIN. Строки без пары исключаются полностью: участник без указанного пива в результат не попадёт.

Как работает INNER JOIN: синтаксис и пример

INNER JOIN диаграмма Венна — пересечение двух кругов таблиц

База данных берёт строку из первой таблицы, ищет совпадение по условию ON. Нашла — добавляет объединённую строку в результат. Не нашла — строка отбрасывается.

SELECT customers.name, orders.amount

FROM customers

INNER JOIN orders ON customers.id = orders.customer_id;

Если в ключевом поле стоит NULL, строка полностью исключается: NULL не равен ни одному значению. Типичная ошибка — забыть ON. Без него SQL построит перекрёстное соединение и вернёт миллионы строк вместо ожидаемого результата.

LEFT JOIN — левое внешнее соединение

LEFT JOIN (синоним — LEFT OUTER JOIN, слово OUTER необязательно) возвращает все строки левой таблицы независимо от наличия совпадений в правой. Там, где пары нет, SQL подставляет NULL в колонки правой таблицы. Пример: в результате будут все клиенты — Мария без единого заказа тоже появится, но поле orders.amount у неё будет NULL.

SELECT customers.name, orders.amount

FROM customers

LEFT JOIN orders ON customers.id = orders.customer_id;

Практический кейс: поиск записей без пары (WHERE IS NULL)

LEFT JOIN диаграмма Венна — левый круг выделен полностью

Паттерн «поиск сирот» — найти всех клиентов без единого заказа:

SELECT customers.name

FROM customers

LEFT JOIN orders ON customers.id = orders.customer_id

WHERE orders.id IS NULL;

WHERE orders.id IS NULL оставляет только строки, для которых не нашлось пары в правой таблице. NULL — это «данных нет», а не пустая строка и не ноль. Сравнивать можно только через IS NULL или IS NOT NULL, но не через = NULL. LEFT JOIN шире INNER JOIN: возвращает все строки левой таблицы, а не только совпавшие.

RIGHT JOIN и FULL OUTER JOIN

RIGHT JOIN диаграмма Венна — правый круг выделен полностью

RIGHT JOIN симметричен LEFT JOIN: возвращает все строки правой таблицы, заполняя NULL в колонках левой там, где пары нет. На практике RIGHT JOIN часто заменяют LEFT JOIN с переставленными таблицами — результат тот же, а читаемость кода выше.

FULL OUTER JOIN объединяет оба подхода: все строки из обеих таблиц, NULL с обеих сторон там, где совпадений нет. Типичный кейс — сверка плановых кампаний и фактических откликов: нужны все записи, включая непарные.

Синтаксис RIGHT JOIN и FULL OUTER JOIN с примерами

FULL OUTER JOIN диаграмма Венна — оба круга выделены полностью

RIGHT JOIN — все отклики, включая те, что без кампании:

SELECT campaigns.title, responses.id

FROM campaigns

RIGHT JOIN responses ON campaigns.id = responses.campaign_id;

FULL OUTER JOIN — все кампании и все отклики:

SELECT campaigns.title, responses.id

FROM campaigns

FULL OUTER JOIN responses ON campaigns.id = responses.campaign_id;

Оставить только непарные строки с обеих сторон:

WHERE campaigns.id IS NULL OR responses.campaign_id IS NULL

CROSS JOIN — перекрёстное соединение

Хотите сменить профессию или повысить квалификацию?

Федеральный проект «Активные меры содействия занятости» даёт возможность пройти обучение бесплатно за счёт государства

  • Программы от ведущих вузов России — от 2 месяцев
  • Удостоверение или диплом установленного образца
  • Центр карьеры: 7 500+ вакансий, помощь с трудоустройством
Оставить заявку
image

CROSS JOIN производит декартово произведение: каждая строка левой таблицы соединяется с каждой строкой правой. Условие ON не требуется. Результат — N × M строк.

SELECT sizes.name, colors.name

FROM sizes

CROSS JOIN colors;

Применение: генерация всех комбинаций характеристик товара — матрица размеров и цветов, расписание временных слотов, тестовые наборы данных.

Декартово произведение и риски применения

CROSS JOIN — сетка декартового произведения всех строк двух таблиц

Три размера × три цвета = 9 комбинаций — управляемо. Но 1 000 строк × 1 000 строк = 1 000 000 строк в результате. CROSS JOIN без осознанной логики создаёт огромную нагрузку на базу данных. Уместен только для генерации всех комбинаций на малых таблицах — при работе с большими объёмами это риск экспоненциального роста данных.

SELF JOIN — соединение таблицы с собой

SELF JOIN — соединение таблицы с самой собой. Без псевдонимов (Table Alias) это синтаксически невозможно: SQL должен понимать, в какой роли выступает каждая копия таблицы.

Типичный кейс — таблица сотрудников с полем manager_id, которое ссылается на id другого сотрудника-руководителя из той же таблицы.

Иерархические структуры и синтаксис SELF JOIN

SELF JOIN — иерархическое дерево руководитель-подчинённый в одной таблице

SELECT e1.name AS сотрудник, e2.name AS руководитель

FROM employees AS e1

JOIN employees AS e2 ON e1.manager_id = e2.id;

Псевдонимы e1 и e2 делают одну таблицу видимой в двух ролях одновременно. Результат — пары «сотрудник–руководитель». Другие применения: категория–подкатегория, комментарий–ответ на комментарий.

Несколько JOIN в одном SQL-запросе

Порядок выполнения цепочки JOIN в SQL — пошаговая схема объединения таблиц

SQL строит JOIN-цепочку слева направо: сначала объединяет первые две таблицы в промежуточный результат, затем присоединяет третью к нему — и так далее. Порядок таблиц влияет на производительность, но не на итоговый результат при корректных условиях ON. При трёх и более таблицах псевдонимы обязательны — без них запрос становится нечитаемым.

Пример запроса с тремя и более таблицами

Четыре таблицы: клиенты → заказы → позиции заказа → категории:

SELECT c.name, o.id AS order_id, oi.product, cat.name AS category

FROM customers AS c

INNER JOIN orders AS o ON c.id = o.customer_id

INNER JOIN order_items AS oi ON o.id = oi.order_id

LEFT JOIN categories AS cat ON oi.category_id = cat.id;

Последнее соединение — LEFT JOIN, потому что у некоторых позиций категория может отсутствовать. Псевдонимы c, o, oi, cat сокращают код и выделяют роль каждой таблицы. Порядок JOIN не влияет на результат, но может влиять на скорость выполнения запроса.

Как выполнить JOIN в SQL Server Management Studio

Интерфейс SSMS — редактор SQL-запроса с JOIN и панель результатов

SQL Server Management Studio (SSMS) — графическая среда Microsoft SQL Server. Синтаксис JOIN в SQL идентичен стандарту ISO/IEC SQL, поэтому запросы работают без изменений.

Пошагово:

  1. Открыть SSMS и подключиться к серверу.
  2. В меню выбрать New Query (новый запрос).
  3. В раскрывающемся списке вверху выбрать нужную базу данных.
  4. Написать SQL-запрос с JOIN в редакторе.
  5. Нажать F5 — результат появится в нижней панели.

Тот же принцип работает в pgAdmin (для PostgreSQL) и MySQL Workbench — инструменты разные, синтаксис JOIN одинаковый.

Ситуация
Тип JOIN
Нужны только совпадающие записи INNER JOIN
Все записи из левой таблицы + данные из правой LEFT JOIN
Все записи из обеих таблиц FULL OUTER JOIN
Найти записи без пары LEFT JOIN + WHERE IS NULL
Все комбинации строк двух таблиц CROSS JOIN
Иерархия внутри одной таблицы SELF JOIN

Хотите освоить SQL и анализ данных с нуля? В рамках федерального проекта «Активные меры содействия занятости» можно пройти обучение по аналитике данных без отрыва от работы и без вложений. Смотрите каталог доступных программ.

Часто задаваемые вопросы

Чем INNER JOIN отличается от LEFT JOIN?

INNER JOIN возвращает только строки, для которых найдено совпадение в обеих таблицах. LEFT JOIN возвращает все строки левой таблицы — при отсутствии совпадения справа ставит NULL. Клиент без заказов: INNER JOIN его исключит, LEFT JOIN сохранит с NULL в полях заказа.

Что означает JOIN без указания типа?

JOIN без дополнительного слова — сокращённая запись INNER JOIN. Слово INNER необязательно: FROM t1 JOIN t2 ON … и FROM t1 INNER JOIN t2 ON … дают одинаковый результат.

Каков общий синтаксис JOIN в SQL?

Шаблон: SELECT колонки FROM таблица1 ТИП_JOIN таблица2 ON таблица1.внешний_ключ = таблица2.первичный_ключ. Условие ON обязательно для всех типов, кроме CROSS JOIN.

Что такое NULL в результате JOIN?

NULL — специальное значение SQL, означающее «данных нет». В OUTER JOIN появляется там, где не нашлось совпадения. NULL — не пустая строка и не ноль. Фильтровать строки без пары: WHERE col IS NULL.

Когда использовать FULL OUTER JOIN?

FULL OUTER JOIN нужен при полном двустороннем анализе: все строки из обеих таблиц, включая строки без пары. Типичный кейс — сверка плана с фактом: все кампании и все отклики, в том числе непарные.

Можно ли соединить больше двух таблиц?

Да. Цепочка: FROM t1 JOIN t2 ON … JOIN t3 ON … JOIN t4 ON …. SQL выполняет слева направо, каждый JOIN применяется к результату предыдущего. Псевдонимы (AS) обязательны для читаемости при трёх и более таблицах.

С чего начать изучение JOIN для новичка?

Начните с реляционной модели: данные разбиты по таблицам, связанным через внешний ключ. Освойте INNER JOIN и LEFT JOIN — они покрывают 90% задач. Затем — RIGHT, FULL, CROSS, SELF JOIN. Практикуйтесь в PostgreSQL или MySQL.

Зачем нужны псевдонимы таблиц при JOIN?

Псевдонимы сокращают код и обязательны для SELF JOIN — когда таблица соединяется сама с собой в двух ролях: FROM employees AS e1 JOIN employees AS e2 ON e1.manager_id = e2.id. Без AS синтаксис не сработает.

Подайте заявку —
забронируйте место в группе

45 000 мест на 2026 год. Бесплатное обучение по федеральному проекту «Активные меры содействия занятости»

  • Онлайн
  • От 2 месяцев
  • Бесплатно
  • Диплом
Учиться бесплатно
icon