Объясните разницу между `INNER JOIN` и `LEFT JOIN` в SQL

Ответ

Оба оператора используются для объединения данных из нескольких таблиц, но они по-разному обрабатывают строки, для которых не нашлось пары.

Представьте две таблицы: 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 там, где нет совпадений).