RIGHT JOIN

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;

Для додаткової візуалізації є відео.

День ЗСУ!

Live free or die

Вітаю всіх причетних зі святом!

Щиро дякую за щоденну відвагу й захист.

Нехай рідна земля береже вас. З Божею волею і вірою в серці – переможемо.

Тримаймося!

Слава Україні!