Найти в Дзене
Информатика

Как TikTok знает, что ты хочешь посмотреть дальше — и при чём тут JOIN

Открываешь TikTok. Первые три видео — точно в тему. Четвёртое — вообще идеально. Как? Нет никакой магии. Есть база данных, в которой хранится информация о тебе, о видео, о том, что ты досмотрел, что лайкнул, на чём завис на три секунды дольше обычного. И есть запрос, который в реальном времени соединяет всё это вместе и вытаскивает именно то, что с высокой вероятностью удержит тебя ещё на пять минут. Этот запрос называется JOIN. Представь маркетплейс вроде Wildberries или Ozon. Там миллионы товаров, десятки миллионов пользователей, сотни миллионов заказов. Хранить всё это в одной огромной таблице — катастрофа. Это как вести всю бухгалтерию компании в одном Excel-файле с миллионом строк. Технически можно. Практически — нет. Поэтому данные разделяют: И когда тебе нужен ответ на вопрос «какие товары из категории "электроника" заказывали пользователи старше 25 лет из Москвы в прошлом квартале?» — ты соединяешь эти таблицы через JOIN. Одним запросом. Без копипасты. Без Excel. Без боли. Вот
Оглавление
Алгоритм TikTok — это JOIN в реальном времени
Алгоритм TikTok — это JOIN в реальном времени

Ты думаешь, алгоритм — это магия. На самом деле это запрос к базе данных

Открываешь TikTok. Первые три видео — точно в тему. Четвёртое — вообще идеально. Как?

Нет никакой магии. Есть база данных, в которой хранится информация о тебе, о видео, о том, что ты досмотрел, что лайкнул, на чём завис на три секунды дольше обычного. И есть запрос, который в реальном времени соединяет всё это вместе и вытаскивает именно то, что с высокой вероятностью удержит тебя ещё на пять минут.

Этот запрос называется JOIN.

Данные живут порознь — и в этом весь смысл

Данные живут порознь
Данные живут порознь

Представь маркетплейс вроде Wildberries или Ozon. Там миллионы товаров, десятки миллионов пользователей, сотни миллионов заказов.

Хранить всё это в одной огромной таблице — катастрофа. Это как вести всю бухгалтерию компании в одном Excel-файле с миллионом строк. Технически можно. Практически — нет.

Поэтому данные разделяют:

  • отдельно — пользователи
  • отдельно — товары
  • отдельно — заказы
  • отдельно — позиции в заказе

И когда тебе нужен ответ на вопрос «какие товары из категории "электроника" заказывали пользователи старше 25 лет из Москвы в прошлом квартале?» — ты соединяешь эти таблицы через JOIN.

Одним запросом. Без копипасты. Без Excel. Без боли.

Четыре таблицы — одна реальность

JOIN с несколькими таблицами
JOIN с несколькими таблицами

Вот где происходит настоящий инсайт.

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

FROM orders AS o
INNER JOIN customers AS c
ON o.customer_id = c.customer_id
INNER JOIN order_items AS oi
ON o.order_id = oi.order_id
INNER JOIN products AS p
ON oi.product_id = p.product_id
INNER JOIN categories AS cat
ON p.category_id = cat.category_id

Пять строк кода — и у тебя перед глазами полная история каждого заказа: кто купил, что купил, в какой категории, когда и на какую сумму.

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

Декартово произведение — звучит как математика, работает как катастрофа

Декартово произведение — катастрофа
Декартово произведение — катастрофа

Есть одна ошибка, которую совершают все новички. Один раз. После этого — никогда.

Если при соединении таблиц забыть условие связи, база данных не скажет «ошибка». Она скажет «окей» — и перемножит все строки одной таблицы на все строки другой.

100 заказов × 300 позиций = 30 000 строк мусора.

В реальных системах это не 100 и 300. Это миллионы. Такой запрос может положить сервер.

«Декартово произведение — это когда база данных делает всё, что ты попросил. Просто ты попросил не то.»

Поэтому каждый JOIN должен иметь условие ON. Это не формальность — это контракт с базой данных.

LEFT JOIN — для тех, кто умеет задавать правильные вопросы

LEFT JOIN — поиск отсутствующих данных
LEFT JOIN — поиск отсутствующих данных

INNER JOIN даёт пересечение: только то, что есть в обеих таблицах.

LEFT JOIN — другая история. Он отвечает на вопросы типа: «Какие товары никогда не продавались?»

FROM products AS p
LEFT JOIN order_items AS oi
ON p.product_id = oi.product_id
WHERE oi.item_id IS NULL

Простая конструкция. Но за ней — реальная бизнес-ценность: какие позиции в ассортименте мёртвым грузом занимают склад? Сколько денег заморожено в товарах, которые никто не берёт?

Это уже не учёба. Это аналитика, за которую платят деньги.

Читаемый код — это тоже профессия

Можно написать запрос в одну строку. Технически он будет работать. Но через неделю ты сам не поймёшь, что написал. А твой коллега — тем более.

Профессионалы форматируют SQL так, чтобы логика читалась с первого взгляда: каждый JOIN на новой строке, условие ON с отступом, псевдонимы — короткие и осмысленные.

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

Почему это важно прямо сейчас

SQL не устарел. SQL не умирает. SQL — это язык, на котором говорят данные.

За каждой рекомендацией в стриминге, за каждым матчем в онлайн-игре, за каждым начислением кэшбэка в банковском приложении стоит база данных. И кто-то написал запрос, который всё это запускает.

Человек, который понимает, как соединять данные и задавать правильные вопросы — это не просто «тот, кто знает SQL». Это человек, который понимает, как устроен цифровой мир изнутри.

А это уже совсем другой уровень. 🚀

📖 Хочешь копнуть глубже? Полный учебный материал с детальными примерами, схемами и иллюстрациями ждёт тебя на нашем сайте!