Что такое оператор JOIN в SQL и какие основные типы JOIN существуют?

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

Ответ

JOIN — это оператор SQL, который позволяет объединять строки из двух или более таблиц на основе логической связи (условия) между ними. Связь обычно устанавливается по совпадению значений в ключевых столбцах (например, первичный ключ одной таблицы и внешний ключ другой).

Основные типы JOIN (на примере двух таблиц):

  1. INNER JOIN

    • Возвращает только те строки, где есть совпадение в обеих таблицах.
    • Строки без совпадения с любой из сторон исключаются из результата.
      -- Найти всех пользователей, сделавших заказы
      SELECT users.name, orders.id, orders.total
      FROM users
      INNER JOIN orders ON users.id = orders.user_id;
  2. LEFT (OUTER) JOIN

    • Возвращает все строки из левой (первой) таблицы и совпадающие строки из правой.
    • Если совпадения нет, для столбцов правой таблицы будут значения NULL.
      -- Найти всех пользователей и их заказы (если есть)
      SELECT users.name, orders.id
      FROM users
      LEFT JOIN orders ON users.id = orders.user_id;
      -- В результате будут даже пользователи без заказов.
  3. RIGHT (OUTER) JOIN

    • Обратный LEFT JOIN. Возвращает все строки из правой таблицы и совпадающие из левой.
    • Используется реже, так как порядок таблиц можно поменять и использовать LEFT JOIN.
  4. FULL (OUTER) JOIN

    • Возвращает все строки из обеих таблиц.
    • Если совпадение есть, строки объединяются. Если совпадения нет для строки из одной таблицы, недостающие столбцы заполняются NULL.

Визуализация (A и B — таблицы):

INNER JOIN:    Пересечение A и B
LEFT JOIN:     Вся A + пересечение с B
RIGHT JOIN:    Вся B + пересечение с A
FULL JOIN:     Объединение A и B

Практическое применение в тестировании: Проверка целостности данных (все ли заказы имеют валидного пользователя), анализ логов, связанных с пользователями, сложные проверки отчетности.