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

Manual QA Junior SQL / Базы данных обновлено 15.11.2025

Краткий ответ

INNER JOIN — возвращает только совпадающие записи из обеих таблиц.
LEFT JOIN — возвращает все записи из левой таблицы, даже если в правой нет совпадений (вместо них будут NULL).

Полный ответ

Что такое JOIN

JOIN используется в SQL для объединения данных из нескольких таблиц по общему полю (обычно — ключ).
Тип JOIN определяет, какие строки попадут в результат, если совпадений нет.

INNER JOIN

Возвращает только те строки, где есть совпадение по условию ON в обеих таблицах.

Синтаксис:

SELECT A.*, B.*
FROM A
INNER JOIN B ON A.key = B.key;

Пример:
students

id name
1 Kate
2 John

grades

id student_id grade
1 1 A
SELECT students.name, grades.grade
FROM students
INNER JOIN grades ON students.id = grades.student_id;

Результат:

name grade
Kate A

(John не попал, т.к. у него нет записи в grades.)

LEFT JOIN

Возвращает все строки из левой таблицы,
а из правой — только совпадения.
Если совпадения нет — правые поля будут NULL.

Синтаксис:

SELECT A.*, B.*
FROM A
LEFT JOIN B ON A.key = B.key;

Пример:

SELECT students.name, grades.grade
FROM students
LEFT JOIN grades ON students.id = grades.student_id;

Результат:

name grade
Kate A
John NULL

(Т.е. показываются все студенты, даже без оценок.)

Визуальное различие

INNER JOIN возвращает только пересечение. Визуально: 🟢 (A ∩ B)
LEFT JOIN возвращает всё из A + пересечение. Визуально: 🟢A + 🟢(A ∩ B)

Применение на практике

Ситуация: нужно увидеть только пользователей с заказами.
Какой JOIN выбрать: INNER JOIN

Ситуация: нужно увидеть всех пользователей, даже без заказов.
Какой JOIN выбрать: LEFT JOIN

Ситуация: нужно увидеть только записи без совпадений (т.е. “нет заказов”).
Какой JOIN выбрать: LEFT JOIN ... WHERE orders.id IS NULL

Пример:

SELECT users.name
FROM users
LEFT JOIN orders ON users.id = orders.user_id
WHERE orders.id IS NULL;

-> покажет всех пользователей без заказов.

Итог

INNER JOIN берёт только совпадения между таблицами. Использовать, если нужны только связанные данные.
LEFT JOIN берёт все строки из левой таблицы + совпадения из правой. Использовать, если важны все записи из левой таблицы, даже без связей

Оцените ответ
0 / 5 · 0