В чем разница между LEFT JOIN, RIGHT JOIN и INNER JOIN в SQL?

«В чем разница между LEFT JOIN, RIGHT JOIN и INNER JOIN в SQL?» — вопрос из категории Базы данных, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

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

Пример на практике:

-- Таблицы: users (id, name), orders (id, user_id, amount)

-- INNER JOIN: Только пользователи, сделавшие заказы
SELECT u.name, o.amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

-- LEFT JOIN: Все пользователи, даже если у них нет заказов
SELECT u.name, o.amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
-- Для пользователя без заказов в колонке amount будет NULL

-- RIGHT JOIN: Все заказы, даже если пользователь удален (user_id не найден в users)
SELECT u.name, o.amount
FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;

Когда что использовать:

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