Чем INNER JOIN отличается от LEFT JOIN?
- В чём разница 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?
Разбор темы
- JOIN, ключи и ограничения
INNER/OUTER/CROSS JOIN, ловушка ON vs WHERE, первичные/внешние/уникальные ключи и ссылочная целостность.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.