Часть 5 учебника SQL. Все типы JOIN: INNER, LEFT, RIGHT, FULL OUTER, CROSS. Диаграммы Венна, типичные ошибки, fan-out, когда какой брать.
TL;DR: JOIN соединяет строки из двух таблиц по условию. INNER JOIN — только пересечение (строки есть в обеих). LEFT JOIN — все из левой + совпадения из правой. RIGHT JOIN — зеркало LEFT. FULL OUTER JOIN — все из обеих. CROSS JOIN — декартово произведение (каждая с каждой). 80% работы — INNER и LEFT.
В этой части:
Данные о пользователе хранятся в users. Данные о заказах — в orders. Чтобы посчитать «выручка по странам», надо соединить orders с users (orders.user_id → users.id).
INNER JOIN — пересечение: только строки, у которых есть пара в обеих таблицах.
LEFT JOIN — все строки из левой таблицы + совпадения из правой. Если совпадения нет — NULL.
RIGHT JOIN — зеркало LEFT. Все строки из правой таблицы + совпадения слева. Если совпадения слева нет — на месте полей из A будут NULL.
FULL OUTER JOIN — все строки из обеих таблиц. Если пары нет — NULL с той стороны.
Как БД ищет совпадения строк — пошаговая анимация:
CROSS JOIN — декартово произведение. Каждая строка А соединяется с каждой строкой Б. Условия ON у него нет — это и есть его суть. Если в A 3 строки, а в B 3 строки, получится 9 строк (3 × 3).