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Возвращает только строки, у которых есть совпадение в обеих таблицах.JOINОператор, объединяющий строки из двух и более таблиц по условию связи между ними.NULL / IS NULLNULL означает отсутствие значения. Для проверки используется IS NULL, а не = NULL.RIGHT JOINВозвращает все строки из правой таблицы. Для строк без пары в левой — NULL.
Анекдоты по теме
Начинающий: — Я выучил SQL за неделю! Опытный: — Поздравляю. Ты выучил SELECT, INSERT, UPDATE, DELETE. Осталось лет 5 на JOIN, индексы, транзакции и почему NULL — это зло. Удачи.
LEFT JOIN и INNER JOIN спорят, кто важнее. LEFT JOIN: — Я беру всех, даже одиноких. INNER JOIN: — Зато я беру только тех, кто нашёл пару. FULL OUTER JOIN из угла: — А я беру вообще всех и никого не выбрасываю. CROSS JOIN: — Любители. Я перемножаю всех со всеми. Все смотрят на CROSS JOIN с ужасом.
— Сколько джойнов нужно для счастья? — Один INNER JOIN и хороший индекс на колонку связи.