Погружение в базы данных PostgreSQL

Данный курс является консолидацией теоретических основ и практических примеров, которые демонстрируют работу операторов и функций SQL в системе управления базами данных PostgreSQL.

Промокод на скидку: SALE_202411

Подробнее

Регулярные выражения в Python

В этом курсе вы освоите синтаксис регулярных выражений, научитесь создавать сложные шаблоны для поиска и обработки текста, а также изучите мощные функции модуля re в Python.

Пройти курс

Модуль psycopg2 в Python

Модуль psycopg2 позволяет взаимодействовать с базами данных PostgreSQL в скриптах Python.

Пройти курс

Модуль SQLite3 в Python

Встроенный модуль SQLite3 позволяет работать с базами данных SQLite в ваших приложениях, которые написаны на языке программирования Python.

Пройти курс

Погружение в базы данных Oracle

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Купить книгу

SQL без слёз

Цель книги заключается в том, чтобы научить любого человека работать с реляционными базами данных и получать из них необходимую информацию посредством выполнения SQL-запросов.

Скачать книгу

 ›  ›  ›  › Оператор FULL JOIN для объединения таблиц в PostgreSQL

Оператор FULL JOIN для объединения таблиц в PostgreSQL

Что такое FULL JOIN?

Оператор FULL JOIN или его ещё называют FULL OUTER JOIN, предназначен для объединения таблиц и вывода результатов, в которых данные полностью удовлетворяют условию ON, и дополняются записями из левой таблицы (первой по порядку) и правой таблицы (второй по порядку), даже если они не соответствуют условию объединения.

У записей, которые не соответствуют условию, значение столбцов из другой таблицы будет равно NULL (неопределённым).

Для наглядности, работа оператора FULL JOIN представлена ниже на изображении. Область пересечения двух кругов это условия для объединения таблиц в блоке ON, а остальная часть первой (левой) и второй (правой) таблицы будет дополнять результаты запроса.

Оператор FULL JOIN для объединения таблиц в PostgreSQL

Синтаксис оператора FULL JOIN

После ключевого слова FULL JOIN / FULL OUTER JOIN необходимо указать имя таблицы, с которой нужно выполнить объединение, а в блоке ON указываются условия для объединения.

SELECT список_столбцов
FROM таблица_1
[FULL OUTER JOIN | FULL JOIN] таблица_2
ON условие_для_объединения
WHERE условия_для_фильтрации;

Синтетические данные для работы

Для демонстрации работы оператора FULL 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 методом объединения FULL JOIN, а затем вывести для каждого пользователя название города, в котором он проживает. В блоке ON таблицы объединяются по идентификатору городов.

SELECT u.id,
	   u.last_name,
	   u.first_name,
	   c.name
FROM users u
FULL JOIN city c
ON c.id = u.city_id;

Выполняем запрос и получаем результат, в котором выведены все пользователи и города, в которых они проживают. Обратите внимание, что в результатах есть записи из таблиц city и users, которые не соответствуют условию объединения ON. Это как раз подчеркивает работу оператора FULL JOIN.

Результат работы оператора FULL JOIN в PostgreSQL

Метки: , , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *