JOINНачальный
LEFT JOIN
Возвращает все строки из левой таблицы. Для строк без пары в правой — NULL.
Синтаксис
SELECT ... FROM t1 LEFT JOIN t2 ON t1.id = t2.t1_id;
Объяснение
LEFT JOIN (= LEFT OUTER JOIN) — второй по популярности тип соединения. Гарантирует, что все строки левой таблицы попадут в результат.
Часто используется для:
- Поиска «осиротевших» записей: WHERE right.id IS NULL
- Опциональных связей: пользователь может иметь профиль, а может не иметь
Пример
-- Все пользователи, даже без заказов SELECT u.name, COUNT(o.id) AS orders_count FROM users u LEFT JOIN orders o ON o.user_id = u.id GROUP BY u.id, u.name; -- Пользователи БЕЗ заказов SELECT u.* FROM users u LEFT JOIN orders o ON o.user_id = u.id WHERE o.id IS NULL;
Связанные термины
FULL OUTER JOINВозвращает все строки из обеих таблиц. Где нет совпадения — NULL с соответствующей стороны.INNER JOINВозвращает только строки, у которых есть совпадение в обеих таблицах.NULL / IS NULLNULL означает отсутствие значения. Для проверки используется IS NULL, а не = NULL.RIGHT JOINВозвращает все строки из правой таблицы. Для строк без пары в левой — NULL.
Анекдоты по теме
— Какая разница между INNER JOIN и дружбой? — INNER JOIN рвётся, если нет совпадений. А дружба — LEFT JOIN. Даже когда вы не совпадаете, ты всё равно остаёшься в таблице.
Преподаватель: — Чем отличается INNER JOIN от LEFT JOIN? Студент: — INNER JOIN — как друзья, которые общаются только если у них есть общие интересы. LEFT JOIN — как родственники: ты их не звал, но они всё равно есть.
— Зачем нужен ANTI JOIN? — Найти строки из левой таблицы, которых НЕТ в правой. — Пример? — Пользователи без заказов: SELECT u.* FROM users u WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id); — Или через LEFT JOIN WHERE o.id IS NULL.