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