Вопрос с собеседования · Базы данных

Чем INNER JOIN отличается от LEFT JOIN?

JuniorJOIN, ключи и ограниченияSQL
Ещё спрашивают так:
  • В чём разница INNER и LEFT JOIN?
Коротко

INNER JOIN оставляет только совпавшие пары; LEFT JOIN сохраняет все строки левой таблицы и дополняет их NULL, если пары нет.

  • Клиенты с заказами — INNER; все клиенты, включая без заказов, — LEFT
  • Клиенты без заказов: LEFT JOIN … WHERE o.id IS NULL
  • Условие на правую таблицу в WHERE превращает LEFT в INNER

А ещё Строка с несколькими парами повторяется

Подробно

Практический выбор простой: нужны только клиенты, у которых есть заказы, — INNER; нужны все клиенты вместе с их заказами, включая тех, у кого заказов нет, — LEFT. Частая ошибка — написать LEFT JOIN и затем поставить условие на колонку правой таблицы в WHERE: это отбросит строки с NULL и превратит запрос обратно в INNER. Такие условия помещают в ON.

Что хотят услышать

  • Различие на примере.
  • NULL для непарных строк.

Частые ошибки

  • Фильтровать колонку правой таблицы в WHERE после LEFT JOIN.
  • Забывать, что при отсутствии пары колонки правой таблицы будут NULL.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗LEFT возвращает только строки без совпадений
  • ✓INNER — только пары с совпадением; LEFT добавляет строки левой таблицы без пары с NULL
  • ✗Разница только в скорости выполнения
  • ✗INNER соединяет только по первичному ключу, а LEFT — по любому столбцу из левой таблицы и правой

Что спросят дальше

  • Почему условие на правую таблицу нужно писать в ON?
  • Что делает FULL OUTER JOIN?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

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

Разбор собеседования