🔗
IT и код

Как работает JOIN в SQL

⏱ 4 мин чтения👁 …Обновлено 14 июля 2026ИнфоЗал · База знаний

JOIN — одна из ключевых и поначалу пугающих тем в SQL. На деле идея простая: соединить данные из двух таблиц. Разберём основные виды JOIN на понятном примере.

AB A∩B INNER JOIN — только совпадения; LEFT JOIN — вся A плюс совпадения из B.
JOIN объединяет строки двух таблиц по общему полю (ключу).

Зачем нужен JOIN

Данные обычно разложены по разным таблицам, чтобы не дублировать информацию: например, таблица клиенты и таблица заказы. Чтобы получить «заказы вместе с именами клиентов», нужно связать таблицы по общему полю (ключу) — это и делает JOIN.

INNER JOIN — только совпадения

Самый частый вид. Возвращает строки, для которых нашлось соответствие в обеих таблицах:

SELECT orders.id, clients.name
FROM orders
INNER JOIN clients ON orders.client_id = clients.id;

Заказы без клиента и клиенты без заказов в результат не попадут.

LEFT JOIN — вся левая таблица

Возвращает все строки левой таблицы, а из правой — совпадения (где их нет, будут пустые значения NULL):

SELECT clients.name, orders.id
FROM clients
LEFT JOIN orders ON clients.id = orders.client_id;

Так вы увидите всех клиентов, включая тех, кто ещё не сделал ни одного заказа.

Практическое правило: нужны только строки с парой в обеих таблицах — INNER JOIN. Нужны все записи одной таблицы независимо от наличия пары — LEFT JOIN. Большинство реальных запросов покрываются именно этими двумя.

Другие виды кратко

  • RIGHT JOIN — как LEFT, но берёт все строки правой таблицы (используется реже).
  • FULL JOIN — все строки из обеих таблиц, совпавшие и нет.
  • CROSS JOIN — каждая строка с каждой; применяется редко и осторожно.

Главное — условие ON

Сердце JOIN — условие соединения после ON: по какому полю связывать таблицы. Ошибка или пропуск условия приводит к неверным или огромным результатам. Всегда явно указывайте, какие ключи сопоставляются.

Частые ошибки

  • Забывают условие ON и получают декартово произведение (все со всеми).
  • Путают INNER и LEFT и «теряют» строки без пары.
  • Соединяют по неправильному полю и получают лишние строки.

Что запомнить

JOIN связывает таблицы по общему ключу через условие ON. INNER JOIN оставляет только совпадения в обеих таблицах, LEFT JOIN — все строки левой плюс совпадения из правой (иначе NULL). Этих двух видов хватает для большинства задач. Главное — правильное условие соединения, иначе результат будет неверным.

Коротко: вопросы и ответы

Какой JOIN использовать чаще всего? INNER для совпадений и LEFT, когда нужна вся одна таблица.

Что такое NULL в результате LEFT JOIN? Признак, что для строки левой таблицы не нашлось пары в правой.

Почему запрос вернул слишком много строк? Часто из-за пропущенного или неверного условия ON.

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

Часто нужно связать больше двух таблиц — например, заказы, клиентов и товары. Тогда JOIN пишут подряд: каждый следующий присоединяет новую таблицу по своему условию ON. Давайте таблицам короткие псевдонимы (алиасы) и указывайте, из какой таблицы каждое поле, чтобы не запутаться и не получить ошибку неоднозначного столбца.

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

Была ли статья полезной?
Реклама

Комментарии