INNER JOIN vs LEFT JOIN: разница с примерами на собесе
INNER JOIN и LEFT JOIN — два самых частых типа соединений. Разница в том, как они обрабатывают строки без пары: INNER их отбрасывает, LEFT сохраняет с NULL в правых колонках. На собесе проверяют понимание именно этой механики.
Если коротко. INNER JOIN возвращает только пересечение, LEFT JOIN — все строки левой таблицы + совпадения справа (или NULL).
Проверь себя · 1/3разбор после ответа
В таблицах
orders и users есть одноимённые столбцы: user_id, updated_at, status. Аналитик пишет SELECT * FROM orders NATURAL JOIN users. Что произойдёт?INNER JOIN vs LEFT JOIN: таблица различий
Когда использовать INNER JOIN
- Нужны только записи, у которых есть пара в обеих таблицах.
- Хотите случайно не потерять смысл — пересечение строже.
- Делаете точный отчёт без «висячих» строк.
Когда использовать LEFT JOIN
- Хотите сохранить все строки левой таблицы независимо от совпадений.
- Нужно найти строки без пары (например, клиенты без заказов:
LEFT JOIN ... WHERE right.id IS NULL). - Левая таблица — основная сущность отчёта (заказы, пользователи).
На примере
INNER JOIN — только клиенты с заказами
SELECT c.id, COUNT(o.id) AS orders
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id
GROUP BY c.id;LEFT JOIN — все клиенты + их заказы
SELECT c.id, COUNT(o.id) AS orders
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.id; -- клиенты без заказов попадут со значением 0Ловушка на собесе
Лайфхак с интервью: если делаете
LEFT JOIN ... WHERE right.something = X, JOIN превращается в эффективный INNER (NULL не пройдёт фильтр). Условие на правую таблицу пишите в ON, а не в WHERE.