oracle写层次语句,oracle 层次查询语句

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 * from emp;

EMP_ID              EMP_NAME              UP_EMP_ID

---------            ---------------         ---------------

1              USER1              0

2              USER2              1

3              USER3              1

4              USER4              2

5              USER5              2

6              USER6              3

--从根节点emp_id=1开始,自顶向下查询出根节点的所有子节点

select  emp_id,emp_name,up_emp_id,level

from emp

start with emp_id=1

connect by prior emp_id=up_emp_id

order siblings by emp_id;

EMP_ID                EMP_NAME           UP_EMP_ID                        LEVEL

---------              ---------------      ---------------                    --------

1               USER1            0                       1

2               USER2            1                       2

4               USER4            2                       3

5               USER5            2                       3

3               USER3            1                       2

6               USER6            3                       3

--从emp_id=6,自底向上查询emp_id=6的所有父节点

select emp_id,emp_name,up_emp_id

from  emp

start with emp_id=6

connect by emp_id = prior up_emp_id

order by  emp_id;

EMP_ID              EMP_NAME             UP_EMP_ID

---------            ---------------        ---------------

1              USER1             0

3              USER3             1

6              USER6             3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值