RIGHT JOIN в Oracle SQL: как объединять таблицы с сохранением всех строк из правой таблицы

🟢 Введение

RIGHT JOIN (или RIGHT OUTER JOIN) — это способ объединения двух таблиц, при котором:

  • Возвращаются все строки из правой таблицы

  • Из левой — только совпадающие строки

  • Если совпадения нет — в столбцах левой таблицы будет NULL

Этот тип соединения используется, когда правая таблица является основной, а левая — дополнительной.


🔤 Написание

Базовый синтаксис:

sql
SELECT столбцы
FROM таблица1
RIGHT JOIN таблица2 ON таблица1.поле = таблица2.поле;

Пример:

sql
SELECT e.first_name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;

🔄 Где часто используется

  • Когда правая таблица должна быть основной

  • При поиске записей без связей (например, отделов без сотрудников)

  • В ситуациях, когда используется шаблон «все из правой + связанные из левой»

  • При генерации аналитических или отчётных данных

  • Иногда как альтернатива LEFT JOIN, но в обратном порядке


🧪 10 Примеров использования RIGHT с пояснениями

1️⃣ RIGHT JOIN с отсутствующими сотрудниками

sql
SELECT e.first_name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;

Выведет все отделы, даже если в них нет сотрудников.


2️⃣ Поиск отделов без сотрудников

sql
SELECT d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id
WHERE e.employee_id IS NULL;

Выводит только «пустые» отделы.


3️⃣ RIGHT JOIN с заказами и клиентами

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

Показывает всех клиентов, даже если заказов нет.


4️⃣ RIGHT JOIN с агрегацией

sql
SELECT d.department_name, COUNT(e.employee_id) AS emp_count
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_name;

Считает сотрудников, включая ноль, если отдел пуст.


5️⃣ RIGHT JOIN во VIEW

sql
CREATE OR REPLACE VIEW dept_employees_all AS
SELECT d.department_name, e.first_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;

Создание представления, в котором все отделы присутствуют.


6️⃣ RIGHT JOIN с фильтрацией по дате

sql
SELECT d.department_name, e.hire_date
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id
WHERE e.hire_date >= TO_DATE('01-01-2020','DD-MM-YYYY')
OR e.hire_date IS NULL;

Показывает отделы и сотрудников, нанятых после 2020 года — включая отделы без новых сотрудников.


7️⃣ RIGHT JOIN с фильтром по правой таблице

sql
SELECT e.first_name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id
WHERE d.location_id = 1700;

Показывает отделы в локации 1700 и всех, кто с ними связан.


8️⃣ RIGHT JOIN в подзапросе

sql
SELECT * FROM (
SELECT e.employee_id, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id
) result
WHERE department_name LIKE 'S%';

Отбор по названию отдела после объединения.


9️⃣ RIGHT JOIN с NULL-проверкой

sql
SELECT d.department_id, e.employee_id
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id
WHERE e.employee_id IS NULL;

Выделяем отделы без сотрудников.


🔟 RIGHT JOIN как альтернатива LEFT JOIN

sql
-- вместо этого:
SELECT * FROM A LEFT JOIN B ON A.id = B.id;
— можно так:
SELECT * FROM B RIGHT JOIN A ON A.id = B.id;

Та же логика, разные направления соединения.


🧩 Заключение

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

Если вы видите в отчёте пропуски или хотите отобразить все категории, даже если нет данныхRIGHT JOIN подойдёт идеально.


🔜 Следующая статья:

Оператор ON в Oracle SQL — как задать условие соединения при JOIN

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии