connect by笔记

Oracle高阶之 connect by


create table t2(

  root_id number,

  id number,

  name varchar(5),

  description varchar(10)

  );

insert into t2(root_id,id,name,description)values(0,1,'a','aaa');

insert into t2(root_id,id,name,description)values(1,2,'a1','aaa1');

insert into t2(root_id,id,name,description)values(1,3,'a2','aaa2');

insert into t2(root_id,id,name,description)values(0,4,'b','bbb');

insert into t2(root_id,id,name,description)values(4,5,'b1','bbb1');

insert into t2(root_id,id,name,description)values(4,6,'b2','bbb2')

SELECT * FROM t2;
--prior在哪边,就表示哪列为父列
select * from t2 start WITH root_id = 0 connect by prior id = root_id;

--LEVEL伪列表示树的深度(或叫高度)。
select t2.*,level from t2 connect by prior id = root_id;
--首先,原表中ID为1-6的6行数据均为第一层(id为父列),level=1
--其次,root_id的值等于ID列的行为第二层,level=2
--所以查询结果共9行

select t2.*,LEVEL from t2 start with root_id = 0 connect by prior id = root_id;
--start with子句限定了第一层数据,即,仅筛选ROOT_ID=0的记录

--<<当表中有重复行时,这些重复行不会合并在一起,而是单独算的
insert into t2(root_id,id,name,description)values(4,6,'b2','bbb2');
COMMIT;

select t2.*,level from t2  connect by prior id = root_id order BY level,ID;
-->>

--获取特定子树
select t2.*,LEVEL from t2 start with id = 4 connect by prior id = root_id;

--prior被省略,则查询将不进行深层递归
select * from t2 start with root_id = 0 connect by id = root_id;


select t2.*,level from t2 connect by level<3;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ninn-sang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值