| RIGHT JOIN — це тип зовнішнього з’єднання таблиць, який повертає: • всі рядки з правої таблиці (RIGHT table), • рядки з лівої таблиці (LEFT table), які збігаються з умовою з’єднання (ON), • якщо відповідності немає — поля з лівої таблиці будуть містити NULL. |
| SELECT columns FROM left_table RIGHT JOIN right_table ON left_table.key = right_table.key; |
| RIGHT JOIN логічно застосовують у ситуаціях, коли основною таблицею, з якої потрібно повернути всі записи, є права таблиця в запиті. |
| Наприклад: • треба показати всі замовлення, навіть якщо деякі з них не мають прив’язаних товарів • потрібно отримати всі події, навіть якщо для частини не існує записів у таблиці користувачів • необхідно знайти “висячі” записи (які існують у правій таблиці, але відсутні в лівій) На практиці таких випадків менше, ніж для LEFT JOIN, тому RIGHT JOIN використовується рідше. |
Приклад
-- Створення бази даних
CREATE DATABASE right_join_practice;
USE right_join_practice;
-- Створення таблиць
-- customers — таблиця клієнтів
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
city VARCHAR(100)
);
-- orders — таблиця замовлень
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
amount DECIMAL(10,2),
order_date DATE
);
-- Заповнення таблиць даними
-- Таблиця customers
INSERT INTO customers (name, city) VALUES
('Alice', 'Kyiv'),
('Jennifer', 'Lviv'),
('William', 'Odessa');
-- Таблиця orders
INSERT INTO orders (customer_id, amount, order_date) VALUES
(1, 100.50, '2024-01-01'),
(1, 250.00, '2024-01-05'),
(2, 80.00, '2024-02-01'),
(4, 500.00, '2024-03-01'); -- Нема клієнта з id = 4
-- Усі замовлення + дані клієнтів (типовий RIGHT JOIN)
SELECT customers.id AS customer_id,
customers.name,
orders.id AS order_id,
orders.amount
FROM customers
RIGHT JOIN orders
ON customers.id = orders.customer_id;
-- Знайти “висячі” замовлення (немає відповідних клієнтів)
SELECT orders.*
FROM customers
RIGHT JOIN orders
ON customers.id = orders.customer_id
WHERE customers.id IS NULL;
-- Отримати всі замовлення дорожчі за 100, разом із даними клієнтів
SELECT customers.name, orders.amount
FROM customers
RIGHT JOIN orders
ON customers.id = orders.customer_id
WHERE orders.amount > 100;
-- Показати всі замовлення з клієнтами + упорядкувати по місту клієнта
SELECT orders.id AS order_id,
customers.name,
customers.city,
orders.amount
FROM customers
RIGHT JOIN orders
ON customers.id = orders.customer_id
ORDER BY customers.city;
Для додаткової візуалізації є відео.