Получить доступ

Чем 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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем