Правое внешнее соединение: RIGHT JOIN — все записи из правой таблицы

Что такое RIGHT JOIN и зачем он нужен?

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

Представь ситуацию: у тебя есть таблица с клиентами (customers) и таблица с заказами (orders). Некоторые клиенты ещё не делали заказы, но ты хочешь их видеть в отчёте. Вот тут и пригодится RIGHT JOIN!


Синтаксис RIGHT JOIN

SELECT 
    левая_таблица.столбец, 
    правая_таблица.столбец
FROM 
    левая_таблица
RIGHT JOIN 
    правая_таблица ON левая_таблица.ключ = правая_таблица.ключ

📌 Ключевые моменты:
- RIGHT JOIN включает все строки из правой таблицы (правая_таблица).
- Если в левой таблице (левая_таблица) нет соответствия, то её поля в результате будут NULL.


Пример: Клиенты и их заказы

Допустим, у нас есть две таблицы:

Таблица customers (клиенты):

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(50)
);

INSERT INTO customers VALUES (1, 'Анна'), (2, 'Борис'), (3, 'Виктор');

Таблица orders (заказы):

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    amount DECIMAL(10, 2)
);

INSERT INTO orders VALUES (101, 1, 1500), (102, 1, 800), (103, 2, 500);

Задача: Вывести всех клиентов (даже тех, у кого нет заказов) и их заказы, если они есть.

Решение с RIGHT JOIN

SELECT 
    c.name, 
    o.order_id, 
    o.amount
FROM 
    orders o
RIGHT JOIN 
    customers c ON o.customer_id = c.customer_id;

Результат:

name order_id amount
Анна 101 1500.00
Анна 102 800.00
Борис 103 500.00
Виктор NULL NULL

🔹 Что произошло?
- Все клиенты (customers) попали в результат.
- У Виктора нет заказов, поэтому order_id и amount заполнились NULL.


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

RIGHT JOIN — это зеркальная версия LEFT JOIN.

  • LEFT JOIN → Все записи из левой таблицы + совпадения из правой.
  • RIGHT JOIN → Все записи из правой таблицы + совпадения из левой.

Пример с теми же таблицами (LEFT JOIN):

SELECT 
    c.name, 
    o.order_id, 
    o.amount
FROM 
    customers c
LEFT JOIN 
    orders o ON c.customer_id = o.customer_id;

Результат такой же, но логика другая: мы стартуем от клиентов (LEFT), а не от заказов (RIGHT).

💡 Вывод:
- Если хочешь все записи из первой таблицыLEFT JOIN.
- Если хочешь все записи из второй таблицыRIGHT JOIN.


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

  1. Анализ данных с приоритетом по правой таблице
    Например: выгрузить всех сотрудников, даже если у них нет задач.

  2. Проверка "пропущенных" записей
    sql SELECT * FROM orders o RIGHT JOIN customers c ON o.customer_id = c.customer_id WHERE o.order_id IS NULL; Так найдёшь клиентов без заказов.

  3. Соединение с дополняющими таблицами
    Например, вывести все товары (products), даже если их никто не покупал.


Практическое задание

Даны таблицы:

employees (сотрудники):

CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(50)
);

INSERT INTO employees VALUES 
(1, 'Иван', 'Отдел продаж'),
(2, 'Мария', 'Маркетинг'),
(3, 'Алексей', 'IT');

projects (проекты):

CREATE TABLE projects (
    project_id INT PRIMARY KEY,
    emp_id INT,
    project_name VARCHAR(50)
);

INSERT INTO projects VALUES 
(101, 1, 'Проект X'),
(102, 1, 'Проект Y'),
(103, 3, 'Проект Z');

Задача:
Вывести все проекты, даже если у них нет ответственного сотрудника (например, проект мог быть удалён, но запись осталась).

Решение

SELECT 
    p.project_name, 
    e.name AS employee_name
FROM 
    employees e
RIGHT JOIN 
    projects p ON e.emp_id = p.emp_id;

Ожидаемый результат:

project_name employee_name
Проект X Иван
Проект Y Иван
Проект Z Алексей

Итоги

  • RIGHT JOIN возвращает все записи из правой таблицы, даже если нет совпадений в левой.
  • Поля без совпадений заполняются NULL.
  • Альтернатива LEFT JOIN, просто "зеркальная" логика.
  • Полезен для анализа полного охвата данных из одной таблицы.

Теперь ты знаешь, как вытащить "всё из правой таблицы" без потерь! 🎯

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube