表 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
________________________________________
Go to source web page: Oracle–树的使用(Connect By) – 开发者在线 – www.builder.com.cn
分类目录
- arch/management (17)
- computer (38)
- java/j2ee (305)
- lnmpa (237)
- mac/iphone/ipad/android (11)
- mysql/oracle/postgresql (126)
- os/software (74)
- other (518)
- python (6)
- redis/memcached/mongo (31)
- sitebuild (143)
随便看看
标签云
程序员 创业 人生箴言 eclipse 快捷键 术语 索引 unix命令 vim wordpress java学习笔记 环境变量 oracle内置函数 index 人生 数据类型 nohup tuxedo mysql学习笔记 MS-DOS命令 servlet spring 职场进阶 职业进阶 服务器选购 服务器选型 apache JPA MongoDB 注解 tomcat 子女教育 jquery maven JVM aix命令 网络营销 java异常 seo 人生规划 关键字 css 网络推广 struts 系统优化 成长 frame iframe bluehost jdbc select 我的信仰 oracle函数 cookie HashMap 站长工具 乱码 ArrayList secureCRT jsp session tail find halt 事务 oracle单记录函数 算法 URL window table javascript操作表单元素 String 字符串处理 健康 http 域名 情感 more google A记录 域名解析 netstat 弹出对话框 弹出窗口 框架集 框架 excel 字符串 javascript函数 showModalDialog nginx number 数组 sql frameset 开源程序 java数组 软件 oracle服务友情链接
收藏链接