SQL без слёз

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

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

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

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

Купить книгу

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

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

Что такое NATURAL JOIN?

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

Используйте оператор NATURAL JOIN только тогда, когда это возможно, потому что это может привести к неожиданному результату.

Для наглядности, работа оператора NATURAL JOIN представлена ниже на изображении. В левой и правой таблице есть общий столбец id_job, по которому будет выполнено неявное объединение, а результат объединения этих таблиц обведён пунктирной линией.

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

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

В операторе NATURAL JOIN не нужно указывать в явном виде условие для объединения таблиц (ON), так как этот оператор работает по принципу неявного объединения.

SELECT список_столбцов
FROM таблица_1
NATURAL [INNER, LEFT, RIGHT] JOIN таблица_2
WHERE условия_для_фильтрации;

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

Для демонстрации работы оператора NATURAL JOIN потребуется создать тестовые таблицы и заполнить их данными. В таблице list_users хранится информация о сотрудниках компании, а в таблице job список специализаций.

-- создание таблицы job
CREATE TABLE job (
	id_job integer,
	name_job varchar(30)
);

INSERT INTO job(id_job, name_job)
VALUES (3, 'Дизайнер'),
	   (4, 'Менеджер'),
	   (5, 'Разработчик'),
	   (6, 'Аналитик');

-- создание таблицы list_users
CREATE TABLE list_users (
	id_user integer,
	first_name varchar(30),
	last_name varchar(40),
	id_job integer
);

INSERT INTO list_users(id_user, first_name, last_name, id_job)
VALUES (1, 'Михаил', 'Павлов', 3),
	   (2, 'Илья', 'Виноградов', 4),
	   (3, 'Сергей', 'Киселев', 4),
	   (4, 'Али', 'Маслов', 6),
	   (5, 'Медина', 'Софронова', 5),
	   (6, 'Илья', 'Левин', 5),
	   (7, 'Кирилл', 'Мартынов', 5);

Практический пример

Необходимо объединить две таблицы list_users и job методом объединения NATURAL JOIN, а затем вывести для каждого сотрудника название его специализации.

Запрос ниже написан с использованием оператора NATURAL JOIN. Таблицы list_users и job будут неявно объединены, то есть объединение будет выполнено по столбцу id_job, так как он есть и в той и в другой таблице.

-- Запрос с использованием NATURAL JOIN
SELECT u.*,
	   j.name_job
FROM list_users u
NATURAL JOIN job j;

А вот эти запросы написаны с использованием оператора INNER JOIN и они вернут идентичные результаты, так как эквивалентны запросу выше.

-- 1 вариант
SELECT *
FROM list_users
INNER JOIN job USING (id_job);

-- 2 вариант
SELECT u.*,
	   j.name_job
FROM list_users u
INNER JOIN job j
ON j.id_job = u.id_job;

Выполним любой запрос и получим результат, в котором для каждого сотрудника компании указана его специализации.

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

Метки: , .

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

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

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