Рекурсивное соединение в SQL

SQL База данных

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

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

Рекурсивные соединения иногда также называют «соединениями с фиксированной точкой». Они используются для получения данных родитель-потомок. В SQL рекурсивные соединения реализуются с помощью рекурсивных общих табличных выражений. Рекурсивное общее табличное выражение (CTE) — это способ многократного обращения к запросу.

Теперь мы понимаем рекурсивное соединение в SQL на примере.

Шаг 1: Сначала мы создаем базу данных сотрудников, где общее табличное выражение компании для ее идентификатора сотрудника, имени сотрудника, возраста сотрудника.

Запрос:

CREATE TABLE employees (
 id serial,
 name varchar(20),
  age int
);

Шаг 2: На этом шаге вставьте значения в таблицу сотрудников.

Запрос:

INSERT INTO employees VALUES (1, 'Ankit', 32);
INSERT INTO employees VALUES (2, 'Ayush', 31);
INSERT INTO employees VALUES (3, 'Piyush', 42);
INSERT INTO employees VALUES (4, 'Ramesh', 31);
INSERT INTO employees VALUES (5, 'Rohan', 29);
INSERT INTO employees VALUES (6, 'Harry', 28);
INSERT INTO employees VALUES (7, 'Rohit', 32);
INSERT INTO employees VALUES (8, 'Gogi', 32);
INSERT INTO employees VALUES (9, 'Tapu', 33);
INSERT INTO employees VALUES (10, 'Sonu', 40);

Шаг 3:  Заявление, в котором представлены все отчеты, относящиеся к определенной организации внутри компании. CTE определяется с помощью оператора WITH, за которым следует определение табличного выражения. Команда AS используется для переименования столбца или таблицы с помощью псевдонима. Рекурсивное CTE должно содержать оператор UNION  и быть рекурсивным.

Запрос:

WITH RECURSIVE managertree AS (
 SELECT id, name, age
 FROM employees
 WHERE id = 1 
 UNION ALL
 SELECT e.id, e.name, e.age
 FROM employees e
 INNER JOIN managertree mtree ON mtree.id = e.age
)

Шаг 4:  Чтобы проверить данные рекурсивного соединения, мы используем следующий запрос.

Запрос:

SELECT * FROM managertree;

Выход:

SQL

Читайте также:  Типы и функции PostgreSQL UUID
Оцените статью
bestprogrammer.ru
Добавить комментарий