Таблица tiers хранит ценовые диапазоны: tier_name, min_price, max_price. Нужно каждому продукту присвоить тариф по его цене. Как написать соединение?

AНаписать JOIN по точному совпадению цены с границами диапазона: ON p.price = t.min_price
BНаписать условие диапазона в ON: ON p.price >= t.min_price AND p.price < t.max_price
CНаписать CROSS JOIN и добавить WHERE p.price = t.tier_name для фильтрации по названию тарифа
DНаписать LEFT JOIN по tier_id — для диапазонных условий нужен явный внешний ключ
Правильный ответ. Условие ON поддерживает неравенства: ON p.price >= t.min_price AND p.price < t.max_price соединит продукт с тарифом, в диапазон которого попадает цена.

Разбор

В ON допустимы любые условия, не только равенство. Range join соединяет строки по попаданию значения в диапазон. Важно следить за границами: >= и < гарантируют, что смежные диапазоны не пересекаются. Если диапазоны перекрываются, продукт попадёт в несколько тарифов — строка продублируется. Такие соединения могут быть медленными на больших таблицах без индексов.

Проверь себя · 1/3разбор после ответа
Нужно посчитать число пользователей, которые сделали хотя бы 1 заказ (таблицы users(user_id) и orders(user_id, order_id)). Какой запрос посчитает правильно?
Тренировать SQL в Telegram

Ещё вопросы по теме «JOIN и операции множеств»