Ответ
LEFT JOIN и RIGHT JOIN — это типы внешних соединений (OUTER JOIN), которые возвращают все строки из одной таблицы и сопоставленные строки из другой. Разница — в том, какая таблица считается главной (все строки обязательны).
LEFT JOIN
Возвращает все записи из левой (первой) таблицы, даже если для них нет совпадений в правой таблице. Для несовпадающих строк поля из правой таблицы будут NULL.
SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;
-- Результат: ВСЕ сотрудники, даже те, кто не привязан к отделу.
RIGHT JOIN
Возвращает все записи из правой (второй) таблицы, даже если для них нет совпадений в левой таблице. Для несовпадающих строк поля из левой таблицы будут NULL.
SELECT e.name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id;
-- Результат: ВСЕ отделы, даже те, в которых нет сотрудников.
Практическое правило:
LEFT JOINиспользуется значительно чаще.- Любой
RIGHT JOINможно переписать какLEFT JOIN, просто поменяв таблицы местами в запросе. Это делает код более единообразным и легким для чтения.
Визуализация:
Таблица A LEFT JOIN A-B RIGHT JOIN A-B (эквивалентно LEFT JOIN B-A)
[1, 2, 3] JOIN [1, 2, 3, NULL] VS [NULL, 2, 3, 4]
Таблица B [a, b, c, NULL] [NULL, b, c, d]
[a, b, c, d]