← Назад к вопросам

В чем разница между LEFT JOIN и RIGHT JOIN?

1.3 Junior🔥 241 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

В чем разница между LEFT JOIN и RIGHT JOIN?

LEFT JOIN и RIGHT JOIN различаются в том, какая таблица является основной и какие строки сохраняются при отсутствии совпадений.

LEFT JOIN:

SELECT u.id, u.name, o.total
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

Результат: ВСЕ строки из левой таблицы (users), даже если у пользователя нет заказов. Если нет заказа — поле order.total будет NULL.

RIGHT JOIN:

SELECT u.id, u.name, o.total
FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;

Результат: ВСЕ строки из правой таблицы (orders), даже если заказ не привязан ни к какому пользователю. Если пользователя нет — поле users.name будет NULL.

Визуально:

users table:           orders table:
id | name             id | user_id | total
1  | John             1  | 1       | 100
2  | Jane             2  | 1       | 50
3  | Bob              3  | NULL    | 30

LEFT JOIN результат:
user_id | name | total
1       | John | 100
1       | John | 50
2       | Jane | NULL   ← Jane нет заказов
3       | Bob  | NULL   ← Bob нет заказов

RIGHT JOIN результат:
user_id | name   | total
1       | John   | 100
1       | John   | 50
NULL    | NULL   | 30   ← Заказ без пользователя

В practice:

Я почти всегда использую LEFT JOIN, потому что часто основная таблица — это то, что мне нужно. RIGHT JOIN редко нужен, потому что можно просто переписать как LEFT JOIN с поменянными таблицами:

-- Это эквивалентно
SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id;
SELECT * FROM orders RIGHT JOIN users ON users.id = orders.user_id;

Совет: Не используй RIGHT JOIN в production. Переписывай как LEFT JOIN для clarity. Код должен быть понятен любому разработчику.