Соединение таблиц

INNER JOIN: соединение двух таблиц

Содержание курса

Сквозной запрос: customers и orders с псевдонимами

Соберём всё вместе в рабочий запрос:

SELECT c.name AS клиент,
       o.order_date AS дата,
       o.total_amount AS сумма
FROM customers AS c
INNER JOIN orders AS o ON c.customer_id = o.customer_id;

Пройдём по каждому элементу:

  • FROM customers AS c — начинаем с таблицы клиентов и сразу даём ей псевдоним.
  • INNER JOIN orders AS o — подключаем таблицу заказов с псевдонимом o.
  • ON c.customer_id = o.customer_id — условие соединения: строки склеиваются, когда customer_id совпадает в обеих таблицах. Это именно та связь внешнего ключа, которую мы разбирали раньше: orders.customer_id ссылается на customers.customer_id.
  • SELECT c.name, o.order_date, o.total_amount — берём имя клиента из одной таблицы и данные заказа из другой. Псевдонимы AS клиент, AS дата, AS сумма дают столбцам результата читаемые заголовки — это тот же AS, который использовался для псевдонимов столбцов ещё в ранних уроках.

Результат будет содержать по одной строке на каждый заказ, у которого есть соответствующий клиент. Если клиент сделал три заказа — в результате будет три строки с его именем. Если клиент не сделал ни одного заказа — его не будет совсем. Именно это отличает INNER JOIN от простого перечисления строк одной таблицы: результат формируется только там, где данные из двух таблиц пересекаются по условию ON.

Это же объясняет, почему такой запрос нельзя использовать для проверки «кто из клиентов ещё ничего не купил» — такие клиенты просто исчезнут из результата, не оставив никакого следа.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.