start with…connect by 相关

oracle中有这样一种语法,就是start with XX条件,connect by XX,从而将表中的数据以一种树的形式展示出来,由于这一块很容易让人迷糊,总结下。

首先要XX下百度搜索,搜出来的东西基本就是一个鸟样。因为建表语句,插入数据等等准备条件能够搜出一大堆来,这里就不提供,仅提供小结。

1.start with……connect by放在哪?放在where后面就可以了,如果有where的话。本身的connect by和start with先后顺序没有关系。

2.start with 和connect by后面接什么?start with后面接树的顶点,就好比name=老大,想看看后面的各种各样的小弟是谁。connect by当然是树要延伸的条件,好比把老子要看孙子是谁,就看老子下有哪些儿子,再看儿子有哪些儿子。树延伸的条件就是把本儿子名字传入到下一层级的老子名字中。connect by后面有接关键字prior,prior 儿子名字 = 老子名字。就是刚才说的那样把儿子名字传入到下一层级的老子名字中,注意这里prior 也可以写在左边,也可以写在右边,最好每个人形成自己的习惯,免得弄得精神分裂。

3.SYS_CONNECT_BY_PATH函数。SYS_CONNECT_BY_PATH中需要传入两个参数,第一个是字段,第二个是分隔符。好比SYS_CONNECT_BY_PATH(名字,'/'),select出来后的结果就是/老子/儿子/孙子。这里要注意的是调用这个函数时,就是出来的结果都是以分隔符开头的。

4.关键字CONNECT_BY_ROOT,如果select中使用的话,按照这关键字理解就是直接跳回到根节点,比较好使,比如刚才的老子孙子一列,孙子突然忘了老奶叫什么,好办,直接select CONNECT_BY_ROOT 老婆名字 就可以查出来了。道理就是先跳回到根节点,然后查询字段“老婆名字”。

5.关键字CONNECT_BY_ISLEAF 。按字面意思很好理解,就是看看该节点是不是叶子节点,也就是看看这家伙还有没有儿子,没有就返回1(true),有就返回0(false).使用就是直接select CONNECT_BY_ISLEAF就可以了。

最后,关于在oracle使用树形查询还有其他情况,但应该很好触类旁通,就懒得写了。要理解透这些东西还是要多写,要多想,更要会用。比如可以结合其他函数就可以做出很多花样来,这里就不多阐述了。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/789181/viewspace-1028088/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/789181/viewspace-1028088/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值