高级sql学习——层次查询(Hierarical Retrival)!!!

语法:

 

总结:
1.其中level关键字是可选的,level是层次查询的一个伪列,如果有level,必须有connect by,start with可以没有,level不可以前面加表名。
2.From之后可以是table,view但是只能是一个table。
3.Where条件限制了查询返回的行,但是不影响层次关系,不满足条件的节点不返回。

4.Start with是表示开始节点,如果没有start with,则每行都当作root。Start with后面可以使用子查询,可以带多个条件。

5.Connect by与prior 确定一个层次查询的条件和遍历的方向(prior 确定)。Connect by prior column_1=column_2;(其中prior表示前一个节点的意思)。就是先由根节点,然后遍历子节点。column_1表示父key,column_2表示子key。即这种情况下:connect by prior 父key=子key表示自顶向下,等同于connect by 子key=prior 父key.

注意:start with 和connect by prior不是ANSI标准sql。

where子句会将满足条件的节点删除,但是被删除节点的后代不会受到影响。

connect by 中加上条件会将满足条件的整个树枝包括后代都删除。

 

测试数据:

 

 

 

例子:

   

 

 层次查询限制:
1.层次查询from 之后如果是table,只能是一个table,不能有join。
2.from之后如果是view,则view不能是带join的。
3.使用order by子句,order 子句是在等级层次做完之后开始的,所以对于层次查询来说没有什么意义,除非特别关注level,获得某行在层次中的深度,但是这两种都会破坏层次。

4.在start with中表达式可以有子查询,但是connect by中不能有子查询。

以上是10g之前的限制,10g之后可以使用带join的表和视图,connect by中可以使用子查询。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值