Что вернёт INNER JOIN?
- Что такое JOIN в SQL?
- Почему после JOIN строк стало больше?
INNER JOIN возвращает только пары строк, удовлетворяющие условию ON. Строки без пары в результат не попадают.
- Одна строка с тремя парами даст три строки результата
- Без условия — декартово произведение
- Для сохранения непарных строк — LEFT/RIGHT/FULL JOIN
А ещё JOIN по неуникальному ключу — частая причина задвоенных сумм
Подробно
INNER JOIN сопоставляет строки двух таблиц по условию (обычно равенство ключей) и возвращает каждую подходящую пару. Если у заказа два товара, строка заказа повторится дважды — по разу на каждую позицию.
Следствия:
- строки без пары (клиент без заказов) пропадают — для их сохранения нужен LEFT JOIN;
- соединение «один ко многим» размножает строки «одной» стороны — при подсчёте сумм по ней получается завышенный результат. Решение — агрегировать до JOIN или считать
count(DISTINCT ...); - забытое или неправильное условие даёт декартово произведение — миллионы строк.
Как выполняется: вложенные циклы с индексом (мало строк), хеш-соединение (большие таблицы, равенство), слияние (отсортированные входы) — выбирает оптимизатор, смотреть в EXPLAIN.
Пример
SELECT o.id, c.name
FROM orders o
JOIN customers c ON c.id = o.customer_id; -- заказы с найденным клиентомЧто хотят услышать
- Только совпавшие пары, непарные отбрасываются.
- Размножение строк при «один ко многим».
- Отличие от внешних соединений.
Частые ошибки
- Считать суммы после JOIN с таблицей «многих» без учёта повторов.
- Забыть условие соединения.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Все строки левой таблицы и совпавшие с ними строки правой
- ✓Только строки, у которых есть пара по условию соединения
- ✗Декартово произведение строк обеих таблиц без всякого условия
- ✗Все строки обеих таблиц с NULL на месте отсутствующих пар
Что спросят дальше
- Чем ON отличается от WHERE при LEFT JOIN?
- Что такое CROSS JOIN?
Разбор темы
- JOIN, ключи и ограничения
INNER/OUTER/CROSS JOIN, ловушка ON vs WHERE, первичные/внешние/уникальные ключи и ссылочная целостность.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.