Sobes.tech
Назад к вопросам
Junior — Middle
63

Какое отличие между оператором JOIN и LEFT JOIN при объединении таблиц в SQL?

Компании, где спрашивали
EvappsEvapps

Ответ от нейросети

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.