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

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

Ответ

Эти операции объединения (JOIN) определяют, какие строки из соединяемых таблиц попадут в результирующий набор.

Типы JOIN (на примере таблиц Customers и Orders)

  1. INNER JOIN

    • Возвращает только те записи, для которых условие соединения (ON) выполняется в обеих таблицах.
    • Записи без соответствия отбрасываются.
      -- Только клиенты, у которых есть заказы
      SELECT *
      FROM Customers c
      INNER JOIN Orders o ON c.id = o.customer_id;
  2. LEFT (OUTER) JOIN

    • Возвращает ВСЕ записи из левой таблицы (Customers).
    • Для записей, у которых нет соответствия в правой таблице, поля из правой таблицы будут NULL.
      -- Все клиенты, даже если у них нет заказов
      SELECT *
      FROM Customers c
      LEFT JOIN Orders o ON c.id = o.customer_id;
  3. RIGHT (OUTER) JOIN

    • Возвращает ВСЕ записи из правой таблицы (Orders).
    • Для записей, у которых нет соответствия в левой таблице, поля из левой таблицы будут NULL.
    • На практике используется реже, так как его всегда можно заменить на LEFT JOIN, поменяв таблицы местами.
      -- Все заказы, даже если для них нет записи о клиенте (аналог LEFT JOIN с переставленными таблицами)
      SELECT *
      FROM Customers c
      RIGHT JOIN Orders o ON c.id = o.customer_id;

Визуализация

Часто используется мнемоника на основе диаграмм Венна или следующее правило:

  • INNER JOIN = пересечение множеств.
  • LEFT JOIN = всё левое множество + пересечение.
  • RIGHT JOIN = всё правое множество + пересечение.