В чём разница между LEFT JOIN и FULL OUTER JOIN в SQL?

Ответ

LEFT JOIN и FULL OUTER JOIN — это типы внешних соединений в SQL, которые позволяют объединять таблицы, даже если в одной из них нет совпадающих строк.

LEFT JOIN (или LEFT OUTER JOIN)

Возвращает все строки из левой таблицы и совпадающие с ними строки из правой таблицы. Если совпадения в правой таблице не найдено, её столбцы для этой строки будут заполнены значениями NULL.

Использование: Полезно, когда нужно получить все записи из основной таблицы (например, users) и связанные с ними данные из другой (например, orders), даже если у некоторых пользователей заказов нет.

-- Получить всех пользователей и их заказы, если они есть
SELECT users.name, orders.id
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

FULL OUTER JOIN

Возвращает все строки из обеих таблиц.

  • Если для строки из левой таблицы есть совпадение в правой, строки объединяются.
  • Если для строки из левой таблицы нет совпадения в правой, столбцы правой таблицы заполняются NULL.
  • Если для строки из правой таблицы нет совпадения в левой, столбцы левой таблицы заполняются NULL.

Использование: Применяется реже. Полезно, когда нужно найти все записи из двух наборов данных и увидеть, какие из них имеют пары, а какие — нет.

-- Получить всех пользователей и все заказы,
-- сопоставляя их там, где это возможно
SELECT users.name, orders.id
FROM users
FULL OUTER JOIN orders ON users.id = orders.user_id;

Ключевое замечание: MySQL не поддерживает FULL OUTER JOIN напрямую. Его эмулируют, объединяя результаты LEFT JOIN и RIGHT JOIN через UNION.