Соединять две таблицы по ключу через INNER и LEFT JOIN и предсказывать, какие строки попадут в результат.
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(*).