Выбор ответа Middle JOIN обновлено

Чем опасен NATURAL JOIN

Вопрос

Запрос SELECT * FROM orders NATURAL JOIN customers работал, а после миграции стал возвращать почти пустой результат. Что вероятнее всего произошло?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Появилась общая колонка (например, createdat) и вошла в условие. NATURAL JOIN соединяет по всем колонкам с одинаковыми именами.

Варианты ответа

  1. NATURAL JOIN удалён в PostgreSQL 16 и работает как CROSS JOIN
  2. Миграция удалила индекс, и NATURAL JOIN перестал находить пары
  3. Появилась общая колонка (например, created_at) и вошла в условиеправильный ответ
  4. NATURAL JOIN работает только при одинаковом числе колонок

Разбор

NATURAL JOIN соединяет по всем колонкам с одинаковыми именами. Появилась общая колонка created_at, и теперь заказ склеивается с клиентом только при совпадении дат. Из PostgreSQL он никуда не делся, индексы влияют на скорость, а не на результат, а число колонок значения не имеет. Поэтому в боевом коде условия соединения пишут явно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме