分享
 
 
 

Oracle--树的使用(ConnectBy)

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

tree

字段

master

sub

sales

insert into tree values

('主1',

'主2',

15);

insert into tree values

('主1',

'主3',

20);

insert into tree values

('主2',

'主4',

5);

insert into tree values

('主2',

'主5',

10);

insert into tree values

('主3',

'主5',

30);

insert into tree values

('主3',

'主6',

40);

SQL select * from tree;

MASTER

SUB

SALES

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

主1

主2

15

主1

主3

20

主2

主4

5

主2

主5

10

主3

主5

30

主3

主6

40

如果用树型结构表示如下:

'主1'

-'主2'

--'主4'

--'主5'

'主1'

-'主3'

--'主5'

--'主6'

SQL select * from tree

start with sub='主2'

--相当于普通sql的where条件

connect by prior master=sub;

--遍历的顺序是sub先于master遍历,也就是说从sub往上遍历一直到master(根节点)

2

MASTER

SUB

SALES

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

主1

主2

15

SQL select * from tree

start with master='主2'

connect by prior master=sub; --sub往上遍历至根节点(参考一下树型图)

2

3

MASTER

SUB

SALES

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

主2

主4

5

--这条是自己本身,也就是第一遍遍历

主1

主2

15

--这是第2次遍历,我们从树型图可以看到,'主2'往上遍历是'主1'

主2

主5

10

主1

主2

15

好,我们关看上面可能还是不好理解,我们加入一个树结构专用函数sys_connect_by_path,便于理解

SQL select sys_connect_by_path(MASTER,'/') from tree

--master表示我遍历的起点只找在master列中存在的,如下例只要'主2'为起点,并以/为分割符

start with master='主2'

connect by prior master=sub;

--往根节点遍历

2

3

SYS_CONNECT_BY_PATH(MASTER,'/')

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

/主2

--第1遍遍历

/主2/主1

--第2遍遍历

/主2

--第2条master='主2'的记录的第1次遍历

/主2/主1

--第2条master='主2'的记录的第2次遍历

SQL select sys_connect_by_path(MASTER,'/') from tree --起点为sub='主5'时MASTER=主2,主3

start with sub='主5'

connect by prior master=sub;

2

3

SYS_CONNECT_BY_PATH(MASTER,'/')

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

/主2

/主2/主1

/主3

/主3/主1

SQL select sys_connect_by_path(MASTER,'/'),sub,master from tree

start with sub is not null

connect by prior master=sub;

2

3

SYS_CONNECT_BY_PATH(MASTER,'/' SUB

MASTER

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

/主1

主2

主1

--找主1到根的路径,这里根是主1他自己

/主1

主3

主1

/主2

主4

主2

/主2/主1

主2

主1

--找主2到根的路径,这里根是主1

/主2

主5

主2

/主2/主1

主2

主1

/主3

主5

主3

/主3/主1

主3

主1

/主3

主6

主3

/主3/主1

主3

主1

select sys_connect_by_path(MASTER,'/'),sub,master from tree

start with sub is not null

connect by prior sub = master;

SYS_CONNECT_BY_PATH(MASTER,'/' SUB

MASTER

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

/主1

主2

主1

/主1/主2

主4

主2

/主1/主2

主5

主2

/主1

主3

主1

/主1/主3

主5

主3

/主1/主3

主6

主3

/主2

主4

主2

/主2

主5

主2

/主3

主5

主3

/主3

主6

主3

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有