oracle "connect by"子句

“CONNECT BY”是层次查询子句,一般用于树状或者层次结果集的查询。

语法:

select...from <TableName>  

where <Conditional-1>

start with <Conditional-2>

connect by <Conditional-3>

order siblings by <Conditional-4>; 

说明:

    1、<Conditional-2>:根节点条件,用于第一次过滤出根节点。

    2、<Conditional-3>:连接条件,nocycle关键字,防止循环,当分层查询中存在上下层互为父子节点的情况时,需要在connect by后面加上nocycle;prior操作符,用于层级条件,没有prior操作符不会发生层级关联,一个connect by语句中可以有多个prior条件,也可以有其他普通条件,但是prior不能用于sequence序列。

     3、<Conditional-4>:同级节点排序条件。

 

执行顺序:
    1、句中有多表关联,先执行关联,无论是join还是where条件中的关联条件。
    2、行start with的条件,选出第一个节点。
    3、行connect by 的条件,层级关联,选出子节点。
    4、行where中的过滤条件,排除结果集中不满足条件的记录,但是不会因为排除一条记录而把它对应的子节点排除。
    5、行order siblings by的排序条件,对同级节点排序。
 
伪列:
    1、 level:标记层级级数,最上层节点为1,之后为2、3……。
    2、 connect_by_iscycle:定位出存在互为父子循环的具体节点,必须跟关键字nocycle结合起来使用。
    3、 connect_by_isleaf:判断是否为叶子节点,即没有子节点,1为是,0为否。
    4、 connect_by_root:标记此节点的祖先节点,后面加列名或表达式,取祖先节点的记录值。
 
函数:
    sys_connect_by_path(column,char):记录根节点到此节点的路径,column是每个节点的路径值,以char分割,column和char都必须是char,varchar2,nchar,或者nvarchar2。
 
通过connect by 生成序列:select rownum from dual connect by rownum<=10;

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值