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

Что такое RIGHT JOIN?

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

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

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

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

RIGHT JOIN (Правый внешний соединение)

RIGHT JOIN (или RIGHT OUTER JOIN) — это операция соединения таблиц в SQL, при которой сохраняются все строки из правой таблицы, а из левой таблицы добавляются только совпадающие строки. Если в левой таблице нет соответствующей строки, появляется NULL.

Синтаксис

SELECT *
FROM table1
RIGHT JOIN table2
ON table1.id = table2.table1_id;

Это эквивалентно:

SELECT *
FROM table2
LEFT JOIN table1
ON table1.id = table2.table1_id;

Просто в RIGHT JOIN гарантированы все строки из правой таблицы, а не из левой.

Практический пример

Представим две таблицы:

users: id, name

  • 1, Alice
  • 2, Bob
  • 3, Charlie

orders: id, user_id, amount

  • 101, 1, 500
  • 102, 2, 300
  • 103, 4, 200 (user_id 4 не существует в users)

Запрос:

SELECT users.name, orders.amount
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

Результат:

  • Alice, 500
  • Bob, 300
  • NULL, 200 (строка из orders с user_id 4 сохранена, но имя пользователя неизвестно)

Когда использовать

RIGHT JOIN полезен когда:

  • Все записи из правой таблицы важны
  • Нужно найти "потерянные" ссылки
  • Проверяется целостность ссылок в данных

В контексте Python и ORMs

В SQLAlchemy RIGHT JOIN используется редко, чаще используют LEFT JOIN, переставляя порядок таблиц:

from sqlalchemy import select
from sqlalchemy.orm import Session

# Эквивалент RIGHT JOIN
query = select(User, Order).join(User, User.id == Order.user_id, isouter=True)
result = session.execute(query).all()

Однако настоящий RIGHT JOIN в SQLAlchemy можно сделать через select(...).join(..., full=True, isouter=True) или явно через raw SQL.

Производительность

Производительность RIGHT JOIN зависит от:

  • Размера таблиц
  • Наличия индексов на колонке соединения
  • Оптимизатора БД

Обычно индекс на колонке соединения критичен для производительности.

Отличия от других JOIN

  • INNER JOIN — только совпадающие строки из обеих таблиц
  • LEFT JOIN — все строки из левой + совпадающие из правой
  • RIGHT JOIN — все строки из правой + совпадающие из левой
  • FULL JOIN — все строки из обеих таблиц

Выбор JOIN зависит от того, какие данные вы считаете "основными" и какие строки должны быть в результате.

Что такое RIGHT JOIN? | PrepBro