Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD / Урок 12-Рекурсивный SQL.doc
Скачиваний:
62
Добавлен:
20.02.2016
Размер:
721.41 Кб
Скачать

Задание условия

Следующий запрос подобен предыдущему за исключением того, что в нем не выбираются преподаватели–доценты.

SELECTLPAD(' ',2*(LEVEL-1)) ||NameAS"Фамилия",TchPKAS"Номер преп.",ChiefAS"Номер руков.",PostAS"Должность преп."FROM TEACHER

WHERE LOWER(Post) <> 'доцент' START WITH Chief IS NULL CONNECT BY PRIOR TchPK = Chief;

Фамилия Номер преп. Номер руков. Должность преп. ----------------- ----------- ------------ --------------- Сидоров 16 профессор Хоменко 2 4 преподаватель Витковский 1 2 ассистент Воробьев 3 4 ассистент Кузнецов 5 4 преподаватель Марченко 9 5 ассистент Козлитин 8 6 ассистент Недоводеев 11 7 преподаватель Резник 10 16 профессор Ахромеев 13 профессор Дараганов 15 преподаватель

11 строк выбрано.

Обратите внимание, что преподаватели–доценты не попали в результат, но их подчиненные в списке присутствуют, причем с сохранением третьего уровня вложенности (это видно по отступу расположения их фамилий, не смотря на то, что согласно полученному результату они вроде бы непосредственно подчинены Сидорову, который находится на первом уровне).

Условие на глубину иерархической структуры

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

SELECTLPAD(' ',2*(LEVEL-1)) ||NameAS"Фамилия",TchPKAS"Номер преп.",ChiefAS"Номер руков.",PostAS"Должность преп."FROM TEACHER START WITH Chief IS NULL CONNECT BY PRIOR TchPK = Chief AND LEVEL <=2;

Фамилия Номер преп. Номер руков. Должность преп. ----------------- ----------- ------------ --------------- Сидоров 16 профессор Радишевский 4 16 доцент Заплатинский 6 16 доцент Лебедь 7 16 доцент Резник 10 16 профессор Ахромеев 13 профессор Наумов 14 доцент Дараганов 15 преподаватель

8 строк выбрано.

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

SELECTLPAD(' ',2*(LEVEL-1)) ||NameAS"Фамилия",TchPKAS"Номер преп.",ChiefAS"Номер руков.",PostAS"Должность преп."FROM TEACHER START WITH UPPER(Name) = 'РАДИШЕВСКИЙ' CONNECT BY PRIOR TchPK = Chief;

Фамилия Номер преп. Номер руков. Должность преп. ----------------- ----------- ------------ --------------- Радишевский 4 16 доцент Хоменко 2 4 преподаватель Витковский 1 2 ассистент Воробьев 3 4 ассистент Кузнецов 5 4 преподаватель Марченко 9 5 ассистент

6 строк выбрано.