欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 有关Oracle描述层次查询(hierarchical query)的详细情况,先看一张图: 正确答案:BD A错误,树的遍历可以从上至下,或从下至上 B正确 C正确,可以删除某个某个遍历的分支 例: 删除scott的分支 S
欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入
有关Oracle描述层次查询(hierarchical query)的详细情况,先看一张图:
正确答案:BD
A错误,树的遍历可以从上至下,或从下至上
B正确
C正确,可以删除某个某个遍历的分支
例: 删除scott的分支
SQL> select empno,ename,level,lpad('',2*level-1)||sys_connect_by_path(ename,'/') path from emp
2 start with empno=7566
3 connect by priorempno=mgr and ename!='SCOTT';
D错误
SQL> select empno,ename,level,lpad('',2*level-1)||sys_connect_by_path(ename,'/') path from emp
2 where ename!='SCOTT'
3 start with empno=7566
4 connect by priorempno=mgr;
可以使用条件限制输出。
正确答案BC
EMPNO ENAME LEVEL PATH
---------- ---------- ----------------------------------------
7566 JONES 1 /JONES
7876 ADAMS 3 /JONES/SCOTT/ADAMS
7902 FORD 2 /JONES/FORD
7369 SMITH 3 /JONES/FORD/SMITH
EMPNO ENAME LEVEL PATH
---------- ---------- ----------------------------------------
7566 JONES 1 /JONES
7902 FORD 2 /JONES/FORD
7369 SMITH 3 /JONES/FORD/SMITH
层次查询知识补充:
[html]
gyj@MYDB> create table test(id number,name varchar2(10),fid number);
Table created.
gyj@MYDB> insert into test values(1,'A',2);
1 row created.
gyj@MYDB> insert into test values(2,'B',3);
1 row created.
gyj@MYDB> insert into test values(3,'C',4);
1 row created.
gyj@MYDB> insert into test values(4,'D',null);
1 row created.
gyj@MYDB> commit;
Commit complete.
正向查找,对于每个遍历,只查找第一行记录
[html]
gyj@MYDB> select distinct first_value(path) over(partition by id order by lev desc) from (
2 select connect_by_root id id,level lev, sys_connect_by_path(name,' ') path
3 from test
4 start with id in (select id from test)
5 connect by id=prior fid);
FIRST_VALUE(PATH)OVER(PARTITIONBYIDORDERBYLEVDESC)
---------------------------------------------------------------------------------------
A B C D
B C D
C D
D
[1] [2]