К списку
SQL и базы данныхJuniorСкрининг с HR

Отличия LEFT, RIGHT и INNER JOIN в SQL: что и как выбирают

Краткий ответ

LEFT JOIN выводит все строки из левой таблицы и совпадающие из правой, RIGHT JOIN — наоборот, все из правой и совпадающие из левой. INNER JOIN возвращает только записи, имеющие совпадения в обеих таблицах.

Развёрнуто

Краткий ответ

LEFT JOIN возвращает все записи из левой таблицы и те, что совпадают по ключу в правой. RIGHT JOIN — все записи из правой таблицы и совпадающие из левой. INNER JOIN показывает только строки, где есть совпадения в обеих таблицах.


Как это работает

В SQL операция JOIN объединяет строки из двух таблиц на основе определённого условия.

  • LEFT JOIN (или LEFT OUTER JOIN) включает все строки из левой таблицы и добавляет данные из правой, если совпадение найдено; если нет, в полях правой таблицы будут NULL.
  • RIGHT JOIN (RIGHT OUTER JOIN) — зеркальный вариант: берутся все строки из правой таблицы и добавляются совпадающие из левой.
  • INNER JOIN возвращает только те строки, где условие соединения выполняется в обеих таблицах, исключая все остальные.
Тип JOIN Результат NULL в результате
LEFT JOIN Все из левой + совпадающие из правой В столбцах правой таблицы, если совпадений нет
RIGHT JOIN Все из правой + совпадающие из левой В столбцах левой таблицы, если совпадений нет
INNER JOIN Только совпадающие строки из обеих таблиц Нет

Пример

SELECT a.id, a.name, b.order_date
FROM customers a
LEFT JOIN orders b ON a.id = b.customer_id;

В этом примере выводятся все клиенты (customers) и их заказы (orders), если они есть. Если заказов нет, поля из orders будут NULL.

Что важно знать на собеседовании

  • INNER JOIN фильтрует записи, оставляя только совпадающие по ключу из обеих таблиц.
  • OUTER JOIN (LEFT и RIGHT) сохраняют все строки из одной таблицы, добавляя данные из другой или NULL.
  • В большинстве СУБД RIGHT JOIN можно заменить на LEFT JOIN, поменяв местами таблицы.
  • Понимание JOIN важно для тестирования корректности данных и оптимизации запросов.
  • Важно различать, какая таблица является левой, а какая правой в запросе.

Тема: SQL и базы данных | Уровень: junior