CONNECT_BY_ROOT в Oracle SQL. Введение
Когда вы строите иерархию с помощью CONNECT BY, может возникнуть вопрос:
❓ А с какого элемента вообще начинается путь для данной строки?
Оператор CONNECT_BY_ROOT позволяет на это ответить. Он возвращает значение столбца от начального (корневого) узла, указанного в START WITH, для каждой строки результата.
🔤 Написание
🔄 Где часто используется
Чтобы узнать главного начальника для любого сотрудника
Определить основную категорию для подкатегории
Найти верхний проект для вложенной задачи
Для группировки по «верхнему уровню»
Построение путей: от корня к листу
🧪 10 Примеров использования CONNECT_BY_ROOT с пояснениями
1️⃣ Показать корневого менеджера для каждого сотрудника
Каждому сотруднику сопоставляем его главного начальника.
2️⃣ Показать путь задачи от главной задачи до подзадачи
Вложенные задачи с их «верхней» задачей.
3️⃣ Иерархия товаров и компонентов
Все детали и компоненты от основного продукта.
4️⃣ Путь вверх от сотрудника
Кто вверху над конкретным сотрудником?
5️⃣ Показать только конечные элементы с корнем
Сопоставление начальника и каждого конечного подчинённого.
6️⃣ Использование CONNECT_BY_ROOT в GROUP BY
Считаем сотрудников по головным отделам.
7️⃣ Формирование пути вверх в SELECT
Получаем путь от корня до текущего узла.
8️⃣ CONNECT_BY_ROOT + CASE
Классифицируем по начальнику.
9️⃣ Подсчёт «ветвей» дерева по корню
Сколько человек в каждой ветви под каждым топ-менеджером.
🔟 CONNECT_BY_ROOT в представлении
Каждому сотруднику сопоставляем главу его ветки.
🧩 Заключение
CONNECT_BY_ROOT — один из самых полезных псевдостолбцов в иерархических запросах.
Он позволяет для каждой строки узнать, откуда она пошла — кто был начальной точкой в дереве.
💡 Практически всегда используется в комбинации с:
LEVELCONNECT_BY_ISLEAFPRIORSTART WITH ... CONNECT BY ...
🔜 Следующая статья:
Оператор DISTINCT в Oracle SQL — как убрать дубликаты из результата