Ответ
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
.