Pepelen
Аналитика данных с нуля: SQL, таблицы и метрики

Lesson

Урок 3: Связываем таблицы: INNER и LEFT JOIN

Соединять две таблицы по ключу через INNER и LEFT JOIN и предсказывать, какие строки попадут в результат.

1 / 7

INNER JOIN vs LEFT JOIN: что попадает в результат

Сравнение двух видов JOIN

Два самых частых вида объединения таблиц отличаются тем, что происходит со строками левой таблицы, у которых нет пары в правой.
Lesson notes
Зачем JOIN и как он работает
В реальных базах данных информация разнесена по разным таблицам. Например, таблица customers хранит имена клиентов (customer_id, name), а таблица orders — заказы (order_id, customer_id, amount). Чтобы узнать, кто сделал какой заказ, нужно соединить таблицы по общему полю customer_id — это и есть JOIN. INNER JOIN возвращает только те строки, у которых есть совпадение ключа в обеих таблицах. Если клиент есть в customers, но не сделал ни одного заказа — он в результат не попадёт. Если заказ есть в orders с customer_id, которого нет в customers — этот заказ тоже выпадет. LEFT JOIN возвращает все строки левой таблицы (той, что написана после FROM), плюс совпадения из правой. Если для строки левой таблицы нет пары в правой — поля правой таблицы будут NULL. Пример: customers: (1, Анна), (2, Борис), (3, Вера). orders: (101, customer_id=1, 500), (102, customer_id=2, 200), (103, customer_id=4, 300). • INNER JOIN по customer_id → строки (Анна, 500) и (Борис, 200). Вера (нет заказов) и заказ 103 (нет клиента с id=4) выпадают. • LEFT JOIN customers → orders → (Анна, 500), (Борис, 200), (Вера, NULL). Заказ 103 всё равно выпадает — его customer_id=4 не совпадает ни с одним клиентом. Типичная ошибка: ожидать LEFT JOIN (хочу всех клиентов), а написать INNER — и «потерять» клиентов без заказов. Bonus-паттерн: чтобы посчитать число заказов на клиента, используют LEFT JOIN + GROUP BY + COUNT(*).
Урок 3: Связываем таблицы: INNER и LEFT JOIN — Аналитика данных с нуля: SQL, таблицы и метрики