Условие
В таблицах 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 при дублях) |
Подводные камни
- Чаще всего интервьюеры держат в голове «уникальные ключи» — отвечайте по этому сценарию, но озвучьте допущение.
INNER JOIN ON 1=1(декартово) даст 4 × 5 = 20 — но это то же, что max INNER при общем ключе.LEFT JOINбез совпадений — это просто T1 с NULL-ами; не пугайтесь, что строк не «4 + что-то», а ровно 4.- В FULL OUTER «дублирование 1-в-многим» работает в обе стороны.
Эталонный ответ
| MIN | MAX | |
|---|---|---|
| INNER | 0 | 20 |
| LEFT | 4 | 20 |
| FULL OUTER | 5 | 9 |
(При допущении уникальных ключей в T1 и T2; дубли могут менять верхние границы.)