Какое отличие между оператором JOIN и LEFT JOIN при объединении таблиц в SQL?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
JOIN обычно означает внутреннее соединение: в результат попадают только строки, для которых есть совпадение в обеих таблицах. LEFT JOIN возвращает все строки из левой таблицы и совпавшие строки из правой, а если совпадения нет — подставляет NULL справа. Ключевое отличие в том, сохраняются ли строки без пары.
Определение:
JOIN без уточнения чаще всего понимают как INNER JOIN — он оставляет только те записи, где условие соединения выполнено для обеих таблиц.
LEFT JOIN — это левое внешнее соединение: оно сохраняет все строки из левой таблицы независимо от наличия совпадения в правой таблице.
Пример использования:
Например, есть таблица users и таблица orders. Если нужно получить только пользователей, у которых есть заказы, подойдет JOIN. Если нужно вывести всех пользователей, включая тех, кто еще не сделал заказ, нужен LEFT JOIN.
-- Только пользователи с заказами
SELECT u.id, u.name, o.id AS order_id
FROM users u
JOIN orders o ON o.user_id = u.id;
-- Все пользователи, даже без заказов
SELECT u.id, u.name, o.id AS order_id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;
Пояснение кода:
В первом запросе:
- берутся строки из
users; - ищутся совпадения в
ordersпоo.user_id = u.id; - в результат попадают только пользователи, у которых нашелся хотя бы один заказ.
Во втором запросе:
- берутся все строки из
users; - для каждой строки ищутся совпадения в
orders; - если заказов нет, поля из
ordersбудутNULL.
Ключевые моменты:
JOINобычно =INNER JOIN, то есть только совпавшие строки.LEFT JOINсохраняет все строки из левой таблицы.- Если справа нет совпадения,
LEFT JOINвозвращаетNULLв правых колонках. LEFT JOINчасто используют, когда нужно найти записи "без пары".- Если после
LEFT JOINдобавить условие на правую таблицу вWHERE, можно случайно превратить его в поведение, похожее наJOIN.