- •Урок 12. РекурсивныйSql
- •Древовидные структуры
- •Стандартное представление и манипулирование деревьями в sql
- •Рекурсивные запросы в Oracle
- •Фраза startwith
- •Фраза connectby
- •Использование псевдостолбца level
- •Задание условия
- •Условие на глубину иерархической структуры
- •Упорядочение строк с помощью фразы order by
- •Подзапрос в startwith
- •Рекурсивные запросы в стандарте sql
- •Определение повторяющихся подзапросов
- •Рекурсивное выполнение запросов
- •Примеры рекурсивных запросов: рейсовые полеты
- •Рекурсия с накоплением
- •Рекурсия и соединение таблиц
- •Отрицание и группирование в рекурсии
- •Примеры рекурсивных запросов: комплектация изделий
- •Вычисление промежуточных количественных характеристик
- •Итоговые количественные вычисления
- •Игнорирование фиктивных изделий
- •В каких агрегатах используется деталь?
- •Parts explosion excluding base parts (Testing For Leaf Nodes In a Parts Explosion)
- •Характеристики поиска
- •Фиксация наличия циклов
- •Направление поиска
- •Более сложная структура рекурсивного запроса
- •Рекурсивные представления
- •Различные виды рекурсии
- •Прямая и взаимная рекурсия
- •Линейная и нелинейная рекурсия
- •Подведение итогов
- •Самостоятельная работа
Урок 12. РекурсивныйSql
Древовидные структуры
Стандартное представление и манипулирование деревьями в SQL
Рекурсивные запросы в Oracle
Рекурсивные запросы в стандарте SQL
Рекурсивными называются запросы, когда для получения необходимого значения (или даже целой таблицы) следует многократно использовать одну и ту же таблицу, причем количество обращений к такой таблице как правило заранее не известно. На этом уроке мы сначала дадим основные понятия о специальной структуре данных, деревьях, которая используются в рекурсивных вычислениях, затем приведем примеры содержательных запросов, которые требуют рекурсивных вычислений, покажем, как можно выразить некоторые из рекурсивных запросов с помощью обычных средств SQL, и, наконец, представим специальные расширения языка для описания вычислений, не имеющих заранее заданной глубины рекурсивной вложенности.
Древовидные структуры
Графы— структуры данных, состоящие из вершин (узлов) связанных дугами.Дерево— специальный вид направленного графа, у которого дуги показывает однонаправленную связь между двумя вершинами (то есть дуги направленные; как правило, на схемах это представляется в виде дуг со стрелкой в конце дуги), причем никакая вершина не может иметь двух входящих в нее дуг. Древовидные структуры широко распространены. Например, в диаграмме организационной структуры подчинения вершины представляют сотрудников, а каждая дуга описывает подчиненность нижестоящего сотрудника (тот, к которому ведет стрелка дуги) вышестоящему. В перечне компоновки агрегатов из других агрегатов/деталей, вершины — агрегаты/детали, а дуги описывают отношение «состоит из». В дереве родословной вершины представляют людей, а дуги представляют связь «является ребенком».
Вершина дерева называется корнем. В организационной диаграмме, это самый большой начальник, а в компоновке агрегатов это собранный агрегат, который имеет непосредственное применение. Дуга связывает две вершины, причем первая из них (из которой исходит дуга) называетсянепосредственным предком(родительская вершина), а вторая —непосредственным потомком(дочерняя вершина). Вершина дерева называетсяконечной(листьевой), если у нее нет вершины–потомка. В организационной структуре листьями являются те сотрудники, которые не имеют подчиненных, а в компоновке агрегатов – детали, которые не имеют внутренней компоновки. Относительно любой вершины можно говорить о множестве всех ее предков (если эта вершина не корневая) и о множестве всех ее потомков, если она не конечная. Две вершины называютсяподобными, если у них один и тот же непосредственный предок. В организационной структуре подобными являются сотрудники одного начальника.
Двоичное дерево— это дерево, в котором вершина может иметь не более двух потомков; В общем случае, n–мерное дерево — то, в котором вершина может иметь не больше чем n вершин–потомков.
Если выбирается некоторая некорневая вершина дерева вместе со всеми ее потомками, такое дерево называется поддеревом. Говорят, что вершина, определяющая поддерево, являетсякорнем поддерева.
Деревья часто изображают в виде диаграмм, как это показано на рис ?? и рис. ?? ниже.
Рис. 10.1 Представление древовидной структуры в виде диаграммы
Рис. 10.2. Представление древовидной структуры в виде вложенных множеств
Древовидная структура распределяет вершины по уровням. Корневая вершина представляет первый уровень, Все вершины, дочерние корневой, представляют второй уровень, и т.д.