Собесов

Максимум строк в INNER JOIN таблиц 60 и 70 при 1:1

SQLJOIN-ыЛёгкаяJunior

Условие

Есть две таблицы, связанные по полю user_id. Одному пользователю в каждой таблице соответствует одна строка (1:1).

В первой таблице 60 строк, во второй — 70.

Сколько максимально строк может быть в результирующей таблице, если выполняем INNER JOIN?

  • 60
  • 70
  • 130
  • 4200

Решение

Правильный ответ — 60.

Логика

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

При отношении 1:1 (один пользователь → одна строка в каждой таблице):

  • Каждое совпадение даёт ровно 1 строку результата.
  • Число совпадений ≤ min(|T1|, |T2|) = min(60, 70) = 60.

То есть максимум — 60 строк (когда все 60 пользователей из первой таблицы есть и во второй).

Почему не другие варианты

  • 70 — это количество, которое могло бы быть, если бы все 70 пользователей второй таблицы были в первой. Но в первой только 60 — невозможно.
  • 130 = 60 + 70 — это размер FULL OUTER JOIN при отсутствии совпадений (или UNION ALL).
  • 4200 = 60 × 70 — декартово произведение CROSS JOIN. Получится, если связь была бы M:M или условие тривиально-истинное.

Формальная формула

Для join-а 1:1:

|A INNER JOIN B ON a.k = b.k| = |A ∩ B по ключу| ≤ min(|A|, |B|)

Для общего случая (когда у одного пользователя могут быть несколько строк):

≤ |A| × |B|  (граница декартова произведения)

Подводные камни

  1. INNER JOIN не «складывает» таблицы. Это пересечение, не объединение. Объединение — UNION (с дедупликацией) или UNION ALL.
  2. Связь 1:N меняет картину. Если у каждого пользователя в таблице B по 5 заказов, то 60 пользователей × 5 = 300 строк максимум.
  3. Несовпадения теряются молча. В 1:1 при 50 совпадениях из 60 — 50 строк результата, остальные 10 «исчезают». Чтобы их видеть — нужен LEFT JOIN.

Эталонный ответ

60. При связи 1:1 максимум строк в INNER JOIN равен min(|T1|, |T2|).

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти