← Все вопросы

Как соединить две таблицы по общему ключу (INNER JOIN)?

Задан 7 месяцев назад1.2к просмотров2 ответа
10

Есть таблица заказов с полем customer_id и отдельная таблица клиентов. Хочу вывести заказы вместе с именем клиента. Как соединить две таблицы в SQL? Что такое JOIN и по какому полю их связывать?

2 ответа

14
✓ Принятый ответ — помог автору

Связывание таблиц делается через JOIN с условием ON, где указываются совпадающие столбцы:

SELECT orders.id, orders.total, customers.name
FROM orders
INNER JOIN customers
  ON orders.customer_id = customers.id;

Читается так: «для каждой строки заказа найди клиента, у которого customers.id равен orders.customer_id, и подставь его имя».

INNER JOIN (можно писать просто JOIN) оставляет только те строки, где нашлась пара в обеих таблицах. Если у заказа customer_id указывает на несуществующего клиента — такой заказ в результат не попадёт.

Чтобы не писать длинные имена таблиц, используют алиасы:

SELECT o.id, o.total, c.name
FROM orders AS o
JOIN customers AS c ON o.customer_id = c.id;

Частые ошибки новичков:

  1. Забыть ON — некоторые СУБД тогда сделают декартово произведение (каждая строка с каждой), и строк станет в разы больше.
  2. Соединять не по тем столбцам — связывать надо первичный ключ одной таблицы с внешним ключом другой.
  3. Неоднозначные имена: если столбец id есть в обеих таблицах, надо уточнять o.id или c.id.
5

Полезная картинка в голове: INNER JOIN — это пересечение двух множеств. Останутся только строки, у которых есть соответствие и слева, и справа. Если хотя бы для одной стороны пары нет — строка отбрасывается. Когда нужно сохранить строки даже без пары (например, клиентов вообще без заказов), берут LEFT JOIN вместо INNER.

Ваш ответ

Войдите, чтобы ответить на вопрос.