Это очень хорошая задача на понимание JOIN, потому что она проверяет не синтаксис, а то, как ты реально представляешь себе соединение таблиц.

Условие:

  • есть таблица A с 5 строками
  • есть таблица B с 10 строками
  • поле ID в обеих таблицах неуникальное

Вопрос:

  • какое минимальное и максимальное количество строк может получиться после
    • INNER JOIN
    • LEFT JOIN
    • FULL JOIN
    • CROSS JOIN

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

INNER  min 0   max 50
LEFT   min 5   max 50
FULL   min 10  max 50
CROSS  min 50  max 50

Теперь разберем, почему именно так.

Почему вообще количество строк может сильно вырасти

Потому что JOIN соединяет строки не “один к одному”, а по всем подходящим совпадениям.

Если в таблице A одна строка совпадает с тремя строками из B, то после join она даст уже три строки.

Если таких совпадений много, результат может разрастись очень сильно.

Именно это часто происходит в реальной аналитике, когда после JOIN число строк внезапно становится больше, чем было.

1. INNER JOIN

Минимум

Минимум — 0.

Почему:

  • если между таблицами вообще нет совпадений по ID, INNER JOIN не вернет ни одной строки

Пример логики:

  • в A только ID = 1
  • в B только ID = 2
  • совпадений нет
  • результат пустой

Максимум

Максимум — 5 * 10 = 50.

Почему:

  • если все 5 строк из A совпадают со всеми 10 строками из B по одному и тому же ID
  • тогда каждая строка A соединится с каждой строкой B

Итого:

INNER JOIN -> min 0, max 50

2. LEFT JOIN

Минимум

Минимум — 5.

Почему:

  • LEFT JOIN всегда сохраняет все строки из левой таблицы A
  • даже если совпадений в B нет вообще

Тогда просто получим:

  • все 5 строк из A
  • столбцы из B будут NULL

Максимум

Максимум — 50.

Почему:

  • если каждая строка из A матчится со всеми 10 строками B
  • тогда получаем те же 5 * 10 = 50

Итого:

LEFT JOIN -> min 5, max 50

3. FULL JOIN

Минимум

Минимум — 10.

Здесь нужно думать аккуратно.

FULL JOIN возвращает:

  • все совпавшие строки
  • все несовпавшие строки из A
  • все несовпавшие строки из B

Минимум будет достигаться тогда, когда:

  • каждая строка из меньшей таблицы A нашла себе совпадение
  • каждая строка из B тоже вошла в совпадения
  • и итоговое число строк получилось как можно меньше

Такое возможно, если 10 строк B “покрывают” все соединение, а 5 строк A распределяются внутри этих матчей без дополнительного раздувания.

Интуитивно минимум для FULL JOIN равен:

max(5, 10) = 10

Максимум

Максимум — 50.

Почему:

  • если все строки совпадают по одному ID
  • тогда получаем декартово количество совпадений 5 * 10

Дополнительных несовпавших строк уже не будет, потому что все и так попали в матч.

Итого:

FULL JOIN -> min 10, max 50

4. CROSS JOIN

С CROSS JOIN все проще всего.

Он вообще не смотрит на ключи и условия совпадения. Это чистое декартово произведение.

Каждая строка A соединяется с каждой строкой B.

Минимум

50

Максимум

Тоже 50

Потому что:

5 * 10 = 50

И это всегда фиксированное число.

Итого:

CROSS JOIN -> min 50, max 50

Финальная таблица

INNER  min 0   max 50
LEFT   min 5   max 50
FULL   min 10  max 50
CROSS  min 50  max 50

Как быстро объяснять это на собеседовании

Хороший ответ обычно звучит так:

  • INNER JOIN: от 0 до A * B
  • LEFT JOIN: от количества строк в левой таблице до A * B
  • FULL JOIN: от max(A, B) до A * B
  • CROSS JOIN: всегда A * B

Для этой задачи:

  • A = 5
  • B = 10

значит:

  • INNER: 0..50
  • LEFT: 5..50
  • FULL: 10..50
  • CROSS: 50..50

Почему эта тема важна не только для собеседований

Потому что именно она помогает понять одну из самых частых проблем в аналитике:

  • после JOIN данных стало больше, чем было

И если человек не понимает кратность совпадений, он может:

  • посчитать неверную выручку
  • задвоить пользователей
  • раздуть метрики

Поэтому эта задача — не просто “теория для интервью”, а очень практическая проверка мышления.

Итог

Если в двух таблицах 5 и 10 строк, а ключ неуникальный, то количество строк после JOIN зависит от типа соединения и структуры совпадений.

Главный принцип такой:

  • чем больше возможных совпадений между строками, тем сильнее раздувается результат
  • максимум почти всегда ограничен произведением размеров таблиц
  • минимум зависит от того, сохраняются ли строки одной или обеих таблиц при отсутствии совпадений

Именно понимание этой логики отличает человека, который просто знает названия JOIN, от человека, который реально понимает, как они работают.