SQL код скопирован в буфер обмена
Узнайте, как использовать SQL RIGHT JOIN (или RIGHT OUTER JOIN) для получения всех записей из правой таблицы и соответствующих записей из левой. Этот урок объясняет, почему RIGHT JOIN считается зеркальным отражением LEFT JOIN, когда его использовать и как поддерживать читаемость запросов. Освойте методы полного извлечения данных на примерах базы Sakila.
EN PT

Урок 5.4: RIGHT JOIN - Включение всех записей из правой таблицы

RIGHT JOIN (или RIGHT OUTER JOIN) является логической противоположностью LEFT JOIN. Он гарантирует, что все строки из «правой» таблицы (той, которая указана после ключевого слова JOIN) будут включены в результирующий набор данных, независимо от того, есть ли для них совпадения в «левой» таблице.

Что такое RIGHT JOIN?

RIGHT JOIN возвращает все строки из правой таблицы и только совпадающие строки из левой таблицы. Если совпадения в левой таблице не найдено, результат будет содержать значения NULL в столбцах левой таблицы.

Визуализация:

   Таблица A (customer)         Таблица B (payment)
   +----+----------+            +----+----------+
   | id | name     |            | id | amount   |
   +----+----------+            +----+----------+
   | 1  | Alice    | <--------> | 1  | 10.00    | (Совпадение!)
   | NULL          | <--------> | 4  | 50.00    | (Нет совпадения, платеж 4 остается!)
   +----+----------+            +----+----------+

В этом примере платеж с ID 4 сохраняется, даже если с ним не связан ни один клиент (хотя в хорошо спроектированной базе данных, такой как Sakila, это случается редко из-за ограничений внешнего ключа).

Синтаксис RIGHT JOIN

Синтаксис следует тому же шаблону, что и другие соединения:

SELECT
    table1.column1,
    table2.column2
FROM
    table1
RIGHT JOIN
    table2 ON table1.common_column = table2.common_column;
  • RIGHT JOIN: Гарантирует сохранение всех строк из table2 (правой таблицы).
  • ON: Условие соединения.

Практические примеры (база данных Sakila)

Хотя на практике RIGHT JOIN встречается реже, чем LEFT JOIN (так как любой RIGHT JOIN можно переписать как LEFT JOIN, поменяв таблицы местами), его важно понимать.

1. Список всех адресов и сотрудников

Предположим, мы хотим просмотреть все адреса в нашей системе и проверить, закреплены ли за ними сотрудники в данный момент.

SELECT
    s.first_name,
    s.last_name,
    a.address
FROM
    staff AS s
RIGHT JOIN
    address AS a ON s.address_id = a.address_id
ORDER BY
    s.last_name;

Запрос вернет все адреса из таблицы address. Если к адресу не привязан сотрудник, имена будут NULL.

RIGHT JOIN против LEFT JOIN

Любой RIGHT JOIN можно выразить через LEFT JOIN. Большинство разработчиков SQL предпочитают использовать исключительно LEFT JOIN, просто меняя порядок таблиц так, чтобы «основная» таблица оставалась слева. Это обычно делает запрос более удобным для чтения сверху вниз.

Пример эквивалентности:

-- Использование RIGHT JOIN
SELECT f.title, i.inventory_id
FROM film f
RIGHT JOIN inventory i ON f.film_id = i.film_id;

-- Использование LEFT JOIN (тот же результат)
SELECT f.title, i.inventory_id
FROM inventory i
LEFT JOIN film f ON i.film_id = f.film_id;

Ключевые выводы урока

  • RIGHT JOIN возвращает все строки из правой таблицы.
  • Это зеркальное отражение LEFT JOIN.
  • Столбцы из левой таблицы будут содержать NULL, если совпадение не найдено.
  • Большинство разработчиков предпочитают LEFT JOIN для единообразия, но знание обоих типов необходимо для чтения чужого кода.