Ответ
INNER JOIN возвращает только те строки, для которых условие соединения (ON) выполняется в обеих таблицах. Строки без пары отбрасываются.
LEFT JOIN (или LEFT OUTER JOIN) возвращает все строки из левой (первой) таблицы, даже если для них нет совпадения в правой таблице. В таком случае все столбцы из правой таблицы в результирующей строке будут содержать NULL.
Визуализация:
Таблица A Таблица B INNER JOIN A и B LEFT JOIN A и B
-------- -------- --------------- ---------------
id | name id | value A.id | A.name | B.value A.id | A.name | B.value
1 | Alice 1 | 100 1 | Alice | 100 1 | Alice | 100
2 | Bob 3 | 300 3 | Carol | 300 2 | Bob | NULL
3 | Carol 3 | Carol | 300
Пример SQL-запросов:
-- INNER JOIN: Только клиенты, сделавшие заказы.
SELECT c.id, c.name, o.order_date
FROM customers c
INNER JOIN orders o ON c.id = o.customer_id;
-- LEFT JOIN: Все клиенты, даже те, кто не делал заказов.
SELECT c.id, c.name, o.order_date
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE o.order_date IS NULL; -- Частый случай: найти клиентов без заказов.
Практическое правило:
- Используйте
INNER JOIN, когда вам нужны только связанные данные из обеих таблиц. - Используйте
LEFT JOIN, когда вам нужны все записи из основной (левой) таблицы, и дополнительная информация из связанной таблицы — если она есть.