В чем разница между LEFT JOIN и RIGHT JOIN?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
В чем разница между 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. Код должен быть понятен любому разработчику.