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

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

Купить книгу

SQL без слёз

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

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

 ›  ›  ›  › Запрос SELF JOIN для самообъединения таблицы в PostgreSQL

Запрос SELF JOIN для самообъединения таблицы в PostgreSQL

Что такое SELF JOIN?

SELF JOIN — это запрос, который предназначен для самообъединения таблицы, то есть таблица соединяется сама с собой.

Синтаксис запроса SELF JOIN

Для формирования запроса SELF JOIN нужно указать одну и ту же таблицу дважды, но присвоить им разные псевдонимы (алиасы).

Запрос SELF JOIN основан на работе оператора INNER JOIN, также можно использовать LEFT JOIN или RIGHT JOIN. В блоке ON указываются условия для объединения таблиц.

SELECT список_столбцов
FROM таблица_1 AS псевдоним_1
[INNER JOIN|LEFT JOIN|RIGHT JOIN] таблица_1 AS псевдоним_2
ON условие_для_объединения;

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

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

Тестовые данные для запроса SELF JOIN в PostgreSQL

Основываясь на представленной выше структуре организации создаём таблицу list_users и заполняем её данными.

CREATE TABLE list_users (
	id integer,
	last_name varchar(30),
	first_name varchar(30),
	boss_id integer
);

INSERT INTO list_users(id, last_name, first_name, boss_id)
VALUES (1, 'Алешина', 'Варвара', null),
	   (2, 'Селиванова', 'Милана', 1),
	   (3, 'Александрова', 'Анна', 1),
	   (4, 'Нестерова', 'Анна', 2),
	   (5, 'Воронин', 'Артём', 2),
	   (6, 'Гусев', 'Всеволод', 3),
	   (7, 'Потапова', 'Елизавета', 3),
	   (8, 'Лукин', 'Артемий', 4);
COMMIT;

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

Для демонстрации работы запроса SELF JOIN, нам потребуется найти для каждого сотрудника компании его руководителя. Для этого нужно использовать следующий запрос:

SELECT t1.id,
	   t1.last_name,
	   t1.first_name,
	   t2.last_name||' '||t2.first_name AS name_boss
FROM list_users AS t1
INNER JOIN list_users AS t2
ON t2.id = t1.boss_id
ORDER BY t1.id ASC;

Этот запрос сформирован при помощи оператора INNER JOIN и дважды ссылается на таблицу list_users, сначала для поиска сотрудника, а затем для поиска его руководителя. Псевдоним t1 используется для сотрудника, а t2 для руководителя.

В блоке ON указывается условие для самообъединения таблицы list_users и означает, что будут выведены только те записи, которые соответствуют условию id_руководителя = id_руководителя_сотрудника.

Обратите внимание, что руководитель компании с id = 1 отсутствует в списке, так как для него не нашлось пары.

Результат запроса SELF JOIN с использованием оператора INNER JOIN

Чтобы вывести в результате запроса руководителя с id = 1, необходимо заменить в запросе INNER JOIN на LEFT JOIN.

SELECT t1.id,
	   t1.last_name,
	   t1.first_name,
	   t2.last_name||' '||t2.first_name AS name_boss
FROM list_users AS t1
LEFT JOIN list_users AS t2
ON t2.id = t1.boss_id
ORDER BY t1.id ASC;

Теперь в результатах запроса присутствует руководитель компании.

Результат запроса SELF JOIN с использованием оператора LEFT JOIN

Метки: , , .

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

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

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