Собесов

Лиги Цифровой экономики: MIN/MAX строк при INNER/LEFT/FULL OUTER JOIN

SQLТеория JOINЛёгкаяJunior

Условие

В таблицах T1 и T2 соответственно 4 и 5 строк. Какие минимальное и максимальное количество строк может вернуть:

а) T1 INNER JOIN T2? б) T1 LEFT JOIN T2? в) T1 FULL OUTER JOIN T2?

Решение

Базовая логика

JOIN мы делаем по какому-то ключу. Кол-во строк в результате зависит от того, как ключи распределены в обеих таблицах.

a) INNER JOIN

  • MIN = 0: если ни один ключ из T1 не совпадает с T2.
  • MAX = 4 × 5 = 20: если все строки T1 имеют один и тот же ключ, и все строки T2 — тот же. Тогда декартово произведение по матчу.

b) LEFT JOIN

  • Каждая строка T1 появляется хотя бы один раз (с NULL-ами справа, если не нашлось).
  • MIN = 4 (когда в T2 нет ни одного совпадения).
  • MAX = 20 (та же ситуация: всё связано «многие-ко-многим»).

c) FULL OUTER JOIN

Каждая строка из обоих таблиц должна попасть хотя бы один раз; совпадающие склеиваются.

  • MIN = 5: если все 4 ключа T1 идеально матчатся с 4 из 5 ключей T2 (1:1) — в результате 4 склеенных + 1 строка из T2 без пары = 5.

  • MAX = 4 + 5 = 9: когда ни одна строка T1 не матчится с T2; все 9 строк со своими NULL. Если есть совпадения — кол-во уменьшается.

    Точнее: при наличии совпадений «многие-ко-многим» FULL OUTER может быть и больше 9 (декартово произведение совпавших + uncovered). Но в большинстве собеседований предполагается «1 ключ = 1 строка», и тогда:

    • MIN = 5 (все T1 покрыты).
    • MAX = 9 (никто не пересекается).

    Если допускаются дубли: MAX = 20 (как в INNER при тотальном совпадении одного ключа).

Сводная таблица

MIN MAX
INNER 0 20
LEFT 4 20
FULL OUTER 5 (или 4 при дублях) 9 (или 20 при дублях)

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

  1. Чаще всего интервьюеры держат в голове «уникальные ключи» — отвечайте по этому сценарию, но озвучьте допущение.
  2. INNER JOIN ON 1=1 (декартово) даст 4 × 5 = 20 — но это то же, что max INNER при общем ключе.
  3. LEFT JOIN без совпадений — это просто T1 с NULL-ами; не пугайтесь, что строк не «4 + что-то», а ровно 4.
  4. В FULL OUTER «дублирование 1-в-многим» работает в обе стороны.

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

MIN MAX
INNER 0 20
LEFT 4 20
FULL OUTER 5 9

(При допущении уникальных ключей в T1 и T2; дубли могут менять верхние границы.)

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

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

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