TGViewer
что-то на инженерном что-то на инженерном @chtotonainzhenernom · 1.17K subscribers
Post #157 4.61K
Сегодня предлагаю разобрать популярную задачу с SQL-собесов.

Звучит она обычно так:
Есть таблицы t1 и t2, состоящие из одного столбца и имеющие m и n строк соответственно.
Какое минимальное и максимальное количество строк будет в конечной таблице T, полученной в результате джойна t1 и t2?
🟣t1 inner join t2
🟣t1 left join t2
🟣t1 right join t2
🟣t1 full outer join t2
🟣t1 cross join t2

⭐️Учитывая, что значения могут повторяться или быть равны NULL.

🏁🏁🏁🏁🏁🏁🏁🏁🏁
Для наглядности работы джойнов представим, что обе таблицы содержат по 5 строк с уникальными значениями от 1 до 5, типа:
t1 = [1,2,3,4,5]
t2 = [1,2,3,4,5]

🟣Все типы джойнов, кроме CROSS JOIN, вернут по 5 строк, т.к. для каждого значения в t1 есть ровно одно совпадающее значение в t2.
🟣CROSS JOIN создает все возможные комбинации пар строк: 5×5 = 25 строк.
🟣То есть, если значения одинаковые и уникальные, результат всех основных джойнов (INNER, LEFT, RIGHT, FULL OUTER) - это количество уникальных строк, а CROSS JOIN - произведение их количества.
🏁🏁🏁🏁🏁🏁🏁🏁🏁

Усложняемся, добавим в наборы данных NULL и дубликаты:

t1  = [1, 2, 2, NULL, 5]
t2  = [2, 2, 3, NULL, NULL]

🟣INNER JOIN
В t1 и t2 совпадают только значения “2”, следовательно, количество строк: 2×2=4 (каждая двойка из t1 с каждой двойкой из t2).
NULL с NULL не совпадает, строк с NULL в результате нет.
🟣LEFT JOIN
Все 5 строк из t1 гарантированы.
Значения с “2” вернут + две дополнительные строки, количество = 7 строк.
🟣RIGHT JOIN
Аналогично LEFT JOIN, но со всеми строками t2, количество = 7 строк.
🟣FULL OUTER JOIN
Включает все: дубликаты, NULL с обеих таблиц. Количество = 10 строк.
🟣CROSS JOIN
Каждая строка из первой таблицы умножается на каждую из второй = 25 строк.
🏁🏁🏁🏁🏁🏁🏁🏁🏁

💡Становится понятно, что минимум будет достигаться в случае отсутствия пересечения вообще. В таком случае:

🟣INNER JOIN вернет 0 строк, т.к. нет совпадений.
🟣LEFT JOIN вернет все строки из t1 с NULL в местах столбцов t2 ➡️ минимум m строк.
🟣RIGHT JOIN вернет все строки из t2 с NULL в местах столбцов t1 ➡️ минимум n строк.
🟣FULL OUTER JOIN вернет сумму количества строк из обеих таблиц (m + n), т.к. ни одна строка не совпала.
🟣CROSS JOIN остается без изменений ➡️ m × n строк.


💡А максимум будет достигаться, когда каждая строка t1 совпадает с каждой строкой t2:
При полном пересечении, когда каждая строка t1 совпадает с каждой строкой t2, все типы джойнов вернут максимальное количество строк m × n, потому что каждый элемент из одной таблицы сочетается с каждым элементом из другой, образуя полный набор пар совпадающих строк.


💡Если одна из таблиц полностью пустая (не содержит строк):
🟣INNER JOIN вернет 0 строк, т.к. нет данных для совпадений.
🟣LEFT JOIN, если пустая таблица справа, вернет все строки из левой таблицы с NULL в столбцах правой таблицы (число строк равно количеству строк в левой таблице).
🟣RIGHT JOIN, если пустая таблица слева, вернет все строки из правой таблицы с NULL в столбцах левой таблицы (число строк равно количеству строк в правой таблице).
🟣FULL OUTER JOIN вернет все строки из непустой таблицы с NULL в столбцах пустой таблицы (число строк равно количеству строк непустой таблицы).
🟣CROSS JOIN вернет 0 строк, т.к. произведение по пустому множеству всегда пусто.


А вам попадалась эта задача на собеседованиях?
😈

©️что-то на инженерном
  • ❤ 20
  • ✍ 9
  • 🔥 3
  • 👍 1
  • 💅 1
More from @chtotonainzhenernom
  1. Sep 21, 20265 октября начнется 19-й поток программы Data Engineer от Newprolab Программа для junior- и…
  2. Aug 1, 2026На днях стала свидетелем неприятной ситуации. Началось все с того, что я провела K. мок-со…
  3. Jun 13, 2026StarRocks DB В предыдущем посте я упомянула, что сейчас активно занимаюсь задачами миграци…
  4. May 23, 2026Сто лет ничего не писала, потому что было очень много настоящей инженерной работы. Моя ком…
  5. Apr 10, 2026Ищем проблемный запрос в ClickHouse Если CPU на пределе, память почти закончилась, а запро…
  6. Mar 31, 2026Хочу поделиться классной штукой - симулятором карьерного пути дата инженера от Джо Рейса,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →