注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

Oracle树操作(select…start with…connect by…prior)简单使用说明  

2016-08-07 08:01:07|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
oracle树查询的最重要的就是select…start with…connect by…prior语法了。依托于该语法,可以将一个表形结构的以树的顺序递归列出来而不需要过多的参与。要知道,Mysql之类的并没有同类的实现,所以实现这种树操作功能相对而言就会比较麻烦。当然,这里也只是简单说明下,并不涉及到多表联合之类的。
1)首页是准备测试表和测试数据

create table tb_site(
id number(10) not null, --主键id
title varchar2(50), --标题
parent number(10) --parent id
)
--父节点
insert into tb_site(id, title, parent) values(1, '我就上乐乐吧',0);
insert into tb_site(id, title, parent) values(2, '爱上吃喝',0);
--一级子结点
insert into tb_site(id, title, parent) values(3, '精彩图集',1);
insert into tb_site(id, title, parent) values(4, '综合杂志',1);
insert into tb_site(id, title, parent) values(5, '美食美客',2);
insert into tb_site(id, title, parent) values(6, '读图时代',2);
--二级子结点
insert into tb_site(id, title, parent) values(7, '时尚来袭',3);
insert into tb_site(id, title, parent) values(8, '电子书籍',3);
insert into tb_site(id, title, parent) values(9, '笑话大全',4);
insert into tb_site(id, title, parent) values(10, '学习资源',4);

commit;

2)parent字段存储的是上级id,如果是顶级父节点,该parent为0。
3)树操作
a)取所有父节点[这种操作就不多说]:

select * from tb_site m where m.parent = 0;

b)扩展下,查询一个节点的兄弟节点(学习资源的亲兄弟)。

select * from tb_site m where exists (select * from tb_site m2 where m.parent=m2.parent and m2.id=10)

c)重头戏就在这后面,查找一个节点的所有直属子节点(我就上乐乐吧的所有后代):

select * from tb_site m start with m.id=1 connect by m.parent= prior m.id;

d)查找一个节点的所有直属父节点(学习资源的祖宗

select * from tb_site m start with m.id=10 connect by prior m.parent=m.id;

上面列出两个树型查询方式,这两条语句之间的区别在于prior关键字的位置不同,所以决定了查询的方式不同。 当parent = prior id时,数据库会根据当前的id迭代出parent与该id相同的记录,所以查询的结果是迭代出了所有的子类记录;而prior parent = id时,数据库会跟据当前的parent来迭代出与当前的parent相同的id的记录,所以查询出来的结果就是所有的父类结果。
嗯,以上就是这种Oracle树操作最简单应用了,当然看起来还是蛮简单的,如果深入的话,其实还是会发现这种树操作有点不尽人意。当然采用变通办法同样可以实现更多的功能,如果有需要大家可以自行扩充下。
  评论这张
 
阅读(1)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017