09-Lec.ppt
- Количество слайдов: 14
9 Выборка иерархических данных Copyright © Oracle Corporation, 2001. All rights reserved.
Рассматриваемые вопросы • • 9 -2 Понятие иерархического запроса Создание отчета с древовидной структурой Форматирование иерархических данных Исключение ветвлений из структуры дерева Copyright © Oracle Corporation, 2001. All rights reserved.
Пример данных из таблицы EMPLOYEES 9 -3 Copyright © Oracle Corporation, 2001. All rights reserved.
Структура натурального дерева EMPLOYEE_ID = 100 (родитель) MANAGER_ID = 100 (потомок) Kochhar Whalen Higgins De Hann Hunold King Mourgos Rajs Davies Matos Zlotkey Hartstein Vargas Fay Gietz Ernst 9 -4 Lorentz Abel Taylor Copyright © Oracle Corporation, 2001. All rights reserved. Grant
Иерархические запросы SELECT [LEVEL], столбец, выражение. . . FROM таблица [WHERE условие(я)] [START WITH условие(я)] [CONNECT BY PRIOR условие(я)] ; Условие WHERE: выражение оператор_сравнения выражение 9 -5 Copyright © Oracle Corporation, 2001. All rights reserved.
Обход дерева Начальная точка • • Укажите условие, которое должно быть выполнено Допускается любое правильное условие START WITH столбец1 = значение Используя таблицу EMPLOYEES, начните обход дерева с сотрудника по фамилии Kochhar. . START WITH last_name 9 -6 = 'Kochhar' Copyright © Oracle Corporation, 2001. All rights reserved.
Обход дерева CONNECT BY PRIOR столбец1 = столбец2 Обход сверху вниз по данным таблицы EMPLOYEES. . CONNECT BY PRIOR employee_id = manager_id Направление Сверху вниз Снизу вверх 9 -7 Столбец1 = Ключ родителя Столбец2 = Ключ потомка Столбец1 = Ключ потомка Столбец2 = Ключ родителя Copyright © Oracle Corporation, 2001. All rights reserved.
Обход дерева снизу вверх SELECT employee_id, last_name, job_id, manager_id FROM employees START WITH employee_id = 101 CONNECT BY PRIOR manager_id = employee_id ; 9 -8 Copyright © Oracle Corporation, 2001. All rights reserved.
Обход дерева сверху вниз SELECT PRIOR FROM START CONNECT last_name||' reports to '|| last_name "Walk Top Down" employees WITH last_name = 'King' BY PRIOR employee_id = manager_id ; … 9 -9 Copyright © Oracle Corporation, 2001. All rights reserved.
Ранжирование строк с помощью псевдостолбца LEVEL Уровень 1 корень/потомок King Kochhar De Hann Whalen Higgins Hunold Уровень 2 родитель/потомок Mourgos Rajs Davies Matos Zlotkey Hartstein Уровень 3 родитель /потомок /лист дерева Vargas Fay Gietz Ernst 9 -10 Lorentz Abel Taylor Copyright © Oracle Corporation, 2001. All rights reserved. Grant Уровень 4 лист дерева
Форматирование иерархических отчетов с использованием LEVEL и LPAD Создание отчета для вывода менеджеров компании, расположенных на соответствующих уровнях иерархии. COLUMN org_chart FORMAT A 12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2, '_') AS org_chart FROM employees START WITH last_name='King' CONNECT BY PRIOR employee_id=manager_id 9 -11 Copyright © Oracle Corporation, 2001. All rights reserved.
Отсечение ветвей Использование предложения WHERE для исключения узла WHERE last_name != 'Higgins' Kochhar Использование предложения CONNECT BY для исключения ветви CONNECT BY PRIOR employee_id = manager_id AND last_name != 'Higgins' Kochhar Whalen Higgins Gietz 9 -12 Copyright © Oracle Corporation, 2001. All rights reserved.
Вывод «пути» к подчиненному элементу Пример вывода иерархии в 42 отделе и «пути» к подчиненному в этой иерархии: SELECT last_name "Employee", CONNECT_BY_ROOT last_name "Manager", LEVEL-1 "Path_len", SYS_CONNECT_BY_PATH(last_name, '/') "Path" FROM s_emp WHERE LEVEL > 1 and dept_id = 42 CONNECT BY PRIOR id = manager_id; 9 -13 Copyright © Oracle Corporation, 2001. All rights reserved.
Итоги • • В запросе можно указать направление и начальную точку для построения иерархического дерева • 9 -14 Иерархические запросы можно использовать для просмотра иерархических связей между строками таблицы Узлы или ветви можно отсечь или исключить из выходных результатов Copyright © Oracle Corporation, 2001. All rights reserved.
09-Lec.ppt