加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle 层次查询语句

发布时间:2020-12-12 14:20:13 所属栏目:百科 来源:网络整理
导读:Oracle中层次查询语法: select ... [level | connect_by_root |connect_by_isleaf |connect_by_iscycle ] from table_name [where] connect by { prior col1=col2 | col1=prior col2 } [start with] [order [siblings] by]; connect by :说明每行数据将是按

Oracle中层次查询语法:

select ...

[level | connect_by_root |connect_by_isleaf |connect_by_iscycle ]

from table_name

[where]

connect by { prior col1=col2 | col1=prior col2 }

[start with]

[order [siblings] by];

connect by :说明每行数据将是按层次顺序检索,并规定将表中的数据连入树形结构的关系中。prior运算符必须放置在连接关系的两列中某一个的前面,对于子节点间的父子关系,prior运算符所在的一侧为父节点,另一侧的为子节点,从而确定查找树形结构的顺序是自顶向下还是自底向上。

start with:用于标识哪个节点作为查找树形结构的根节点,层次查询需要确定起始点,通过start with,后加条件。start with将确定将哪行作为root,如果不指定start with,则每行都当做root,然后查找其后代。start with后可以跟子查询,如果又where条件,则会截断层次中满足相关条件的节点,但不影响整个层次查询。

level:是一个伪列,代表当前这个节点所在的层级,对于根节点,level返回1,通过这个伪列结合其他oracle函数进行数据的格式化显示。

connect_by_root:connect_by_root必须和某个字段搭配使用,目的是获取根节点记录的字段信息。

connect_by_isleaf:判断当前结点是否为叶子节点,0表示非叶子节点,1表示是叶子节点。

connect_by_cycle:可以检查是否在树形查询的过程中构成循环,这个伪列只是在connect_by_cycle方式下有效。

order siblings by:定义返回时同意父节点下的各个兄弟节点之间的顺序。


例子:

--树形结构表emp;
select*fromemp;
EMP_IDEMP_NAMEUP_EMP_ID
---------------------------------------
1USER10
2USER21
3USER31
4USER42
5USER52
6USER63
--从根节点emp_id=1开始,自顶向下查询出根节点的所有子节点
selectemp_id,emp_name,up_emp_id,level
fromemp
startwithemp_id=1
connectbyprioremp_id=up_emp_id
ordersiblingsbyemp_id;
EMP_IDEMP_NAMEUP_EMP_IDLEVEL
-----------------------------------------------
1USER101
2USER212
4USER423
5USER523
3USER312
6USER633
--从emp_id=6,自底向上查询emp_id=6的所有父节点
selectemp_id,emp_name,up_emp_id
fromemp
startwithemp_id=6
connectbyemp_id=priorup_emp_id
orderbyemp_id;
EMP_IDEMP_NAMEUP_EMP_ID
---------------------------------------
1USER10
3USER31
6USER63

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读