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

Чем отличается использование LEFT JOIN от простого условия WHERE при объединении таблиц?

Компании, где спрашивали
СБЕРСБЕР

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

sobes.tech AI

LEFT JOIN возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если в правой таблице нет совпадений, то поля правой таблицы будут заполнены NULL.

Условие WHERE при объединении таблиц обычно используется с INNER JOIN (или без JOIN, просто с перечислением таблиц), и оно фильтрует строки после объединения, оставляя только те, где условие истинно.

Главное отличие:

  • LEFT JOIN сохраняет все строки из левой таблицы, даже если нет совпадений в правой.
  • Использование условия WHERE для фильтрации по полям правой таблицы после LEFT JOIN может фактически превратить его в INNER JOIN, так как строки с NULL в правой таблице будут отфильтрованы.

Пример:

SELECT a.id, b.value
FROM A a
LEFT JOIN B b ON a.id = b.a_id
WHERE b.value = 'test';

Этот запрос вернет только те строки, где в B есть совпадение и value = 'test', то есть фактически INNER JOIN.

Чтобы сохранить все строки из A, условие по B.value нужно переносить в ON:

SELECT a.id, b.value
FROM A a
LEFT JOIN B b ON a.id = b.a_id AND b.value = 'test';