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.
Анекдоты по теме
— Почему JOIN любят, но боятся? — Потому что соединить две таблицы легко. А четыре — уже сложно. А восемь — ты уже не программист, а жонглёр.
Собеседование. Спрашивают: — В чём разница между LEFT JOIN и LEFT OUTER JOIN? Кандидат молчит 10 секунд. — Это одно и то же. Интервьюер: — Правильно. Просто хотел посмотреть на твоё лицо.
— Что вернёт FULL OUTER JOIN, если нет совпадений? — Все строки из обеих таблиц, в несовпадающих местах — NULL. — Это как? — Представь двух одиноких людей на вечеринке. Каждый сидит за своим столом, напротив — пустое место (NULL).