Иногда нужны все строки одной таблицы, даже без пары во второй. Для этого есть LEFT JOIN — он берёт все строки левой таблицы, а недостающие данные правой заполняет значением NULL:
SELECT u.name, o.amount FROM users u LEFT JOIN orders o ON o.user_id = u.id;
Теперь в результат попадут и пользователи без заказов — у них в amount будет NULL. Это позволяет, например, найти пользователей, которые ничего не заказали:
SELECT u.name FROM users u LEFT JOIN orders o ON o.user_id = u.id WHERE o.id IS NULL;
Основные виды: • INNER JOIN — только совпадения в обеих таблицах; • LEFT JOIN — все из левой + совпадения из правой; • RIGHT JOIN — все из правой (зеркально); • FULL JOIN — все из обеих.
JOIN-ы можно объединять с GROUP BY: например, посчитать сумму заказов по каждому пользователю — самый частый аналитический запрос.