Мира · маркетолог магазина настолок «Кубик»
Спасибо за схему! Но мне нужна нормальная выгрузка: кто заказал, какие игры, почём. И главное: какие жанры приносят больше денег? Хочу понять, что рекламировать.
В прошлом уроке мы выяснили, что заказ, клиент и игра лежат в разных таблицах и связаны номерами. Сегодня учимся склеивать их обратно в одну строку.
Карточки на скрепке
Представь две стопки карточек: заказы и клиенты. Берёшь заказ, смотришь номер клиента, ищешь в стопке клиентов карточку с этим номером и скрепляешь их скрепкой. Получилась одна длинная карточка: заказ плюс его клиент. Повторяешь для каждого заказа.
Это и есть соединение. Скрепляем только пары, у которых совпал номер, а правило совпадения пишем в ON.
Первый JOIN
SELECT o.id AS order_id,
c.name,
c.city,
o.status
FROM orders o
JOIN customers c ON c.id = o.customer_id
ORDER BY o.id
LIMIT 3;
order_id | name | city | status
----------+----------------+-----------------+-----------
1 | Кирилл Волков | Санкт-Петербург | delivered
2 | Елена Тихонова | Казань | delivered
3 | Ольга Комарова | Москва | delivered
Разберём по частям:
FROM orders oиJOIN customers c: две таблицы и их короткие имена. Псевдонимoзначит «заказы»,cзначит «клиенты»;ON c.id = o.customer_id: правило скрепки, тот самый внешний ключ из прошлого урока;o.id,c.name: префикс говорит, из какой таблицы столбец.
Префикс нужен не для красоты. Столбец id есть в обеих таблицах, и без префикса база ответит column reference "id" is ambiguous: какой из двух id ты имел в виду?
JOIN без уточнений означает INNER JOIN, внутреннее соединение. Оно оставляет только строки, у которых нашлась пара. У каждого заказа клиент есть, поэтому строк столько же, сколько заказов, 6555.
урок из курса
Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.