Оператор RIGHT JOIN для объединения таблиц в PostgreSQL
Что такое RIGHT JOIN?
Оператор RIGHT JOIN или его ещё называют RIGHT OUTER JOIN, предназначен для объединения таблиц и вывода результатов, в которых данные полностью удовлетворяют условию ON, и дополняются записями из правой таблицы (второй по порядку), даже если они не соответствуют условию объединения.
У записей правой таблицы (второй), которые не соответствуют условию, значения столбца из левой таблицы (первой) будут равняться NULL (неопределенными).
Для наглядности, работа оператора RIGHT JOIN представлена ниже на изображении. Область пересечения двух кругов это условия для объединения таблиц в блоке ON, а остальная часть второй (правой) таблицы будет дополнять результаты запроса.
Синтаксис оператора RIGHT JOIN
После ключевого слова RIGHT JOIN / RIGHT OUTER JOIN необходимо указать имя таблицы, с которой нужно выполнить объединение, а в блоке ON указываются условия для объединения.
SELECT список_столбцов FROM таблица_1 [RIGHT OUTER JOIN | RIGHT JOIN] таблица_2 ON условие_для_объединения WHERE условия_для_фильтрации;
Синтетические данные для работы
Для демонстрации работы оператора RIGHT JOIN потребуется создать тестовые таблицы и заполнить их данными. В таблице users хранится информация о пользователях, а в таблице city список городов.
-- создание таблицы users CREATE TABLE users ( id integer, last_name varchar(30), first_name varchar(30), city_id integer ); INSERT INTO users(id, last_name, first_name, city_id) VALUES (1, 'Никулина', 'Василиса', 2), (2, 'Климов', 'Алексей', 3), (3, 'Голубев', 'Максим', 6), (4, 'Фомина', 'Аглая', NULL), (5, 'Алексеев', 'Артур', NULL), (6, 'Соколова', 'Дарья', 1), (7, 'Юдина', 'Дарья', NULL); COMMIT; -- создание таблицы city CREATE TABLE city ( id integer, name varchar(30) ); INSERT INTO city(id, name) VALUES (1, 'Екатеринбург'), (2, 'Челябинск'), (3, 'Санкт-Петербург'), (4, 'Хабаровск'), (5, 'Омск'), (6, 'Красноярск'), (7, 'Казань'); COMMIT;
Практический пример
Необходимо объединить две таблицы users и city методом объединения RIGHT JOIN, а затем вывести для каждого пользователя название города, в котором он проживает. В блоке ON таблицы объединяются по идентификатору городов.
SELECT u.id, u.last_name, u.first_name, c.name FROM users u RIGHT JOIN city c ON c.id = u.city_id;
Выполняем запрос и получаем результат, в котором выведены пользователи, которые соответствуют условию объединения в блоке ON. Обратите внимание, что в финальной выборке отсутствуют пользователи с идентификаторами 4, 5 и 7. Это обусловлено тем, что в таблице в таблице city нет значений, с которыми можно связать данные из таблицы users.
Метки: PostgreSQL, RIGHT JOIN, RIGHT OUTER JOIN.