Ответ
Оба оператора используются для объединения данных из нескольких таблиц, но они по-разному обрабатывают строки, для которых не нашлось пары.
Представьте две таблицы: Customers
(клиенты) и Orders
(заказы).
INNER JOIN
(Внутреннее соединение)
Возвращает только те строки, для которых существует совпадение в обеих таблицах по условию соединения. Если у клиента нет заказов, или у заказа нет клиента, такие записи не попадут в результат.
Аналогия: Пересечение двух множеств. Вы получите только общие элементы.
-- Получить только тех клиентов, у которых есть заказы
SELECT c.name, o.order_date
FROM Customers c
INNER JOIN Orders o ON c.id = o.customer_id;
LEFT JOIN
(Левое внешнее соединение)
Возвращает все строки из левой таблицы (Customers
) и совпавшие с ними строки из правой таблицы (Orders
). Если для строки из левой таблицы не нашлось совпадения в правой, то столбцы правой таблицы будут заполнены значениями NULL
.
Аналогия: Весь левый круг и пересечение с правым.
-- Получить ВСЕХ клиентов, и если у них есть заказы - показать их
-- Если заказов нет, order_date будет NULL
SELECT c.name, o.order_date
FROM Customers c
LEFT JOIN Orders o ON c.id = o.customer_id;
Ключевое отличие в результате
Тип JOIN | Результат | Основное применение |
---|---|---|
INNER JOIN | Только строки с совпадениями в обеих таблицах. | Получение строго связанных данных. |
LEFT JOIN | Все строки из левой таблицы + совпадения из правой. | Поиск данных, которые могут отсутствовать в связанной таблице (например, найти клиентов без заказов). |
Существуют также RIGHT JOIN
(работает как LEFT JOIN
, но наоборот) и FULL OUTER JOIN
(возвращает все строки из обеих таблиц, подставляя NULL
там, где нет совпадений).