树状查找SQL

改bug的时候遇到了一个树状查找的问题,还不知道sql语句里面还有这么多的函数可以使用,想想自己学过的,真是太少了......

暂且不感慨了,对用到的几个函数做一下总结吧!!

树状查找应该挺好理解的,你可以想象到树的样子,也就是说在数据库查找的中间数据相互之间是首尾相关联,下面举简单例子说明:

假设有一个表Animal,里面的字段和数据如下

     主键ID        A_ID        Animal名称       P_ID

       001             001         猫类                    001

       002              002        狗类                     002

       003              003         波斯猫                001

       004              004         安哥拉猫    001

   005      005   大狗         002

   006      006    小狗        002

    在另一张表通过主键ID或者A_ID关联,存储一下数据:

    主键ID   A_ID    Amount

    001      003       9

    002      004       10

    003      005       9

    004      006       8   

假如要求分别查找狗类和猫类的数量,或许你觉得直接用sql也行啊,直接先用select,然后sum()求和就好了。

现在数据量量小,你可以根据A_ID和P_ID的值写出来,但是当数据量达到上百、上千的时候,还不写死人呀.....树状查找基本就是针对这种情况进行递归查找,写起来方便,至于效率我倒是没有测试过。

下面进入正题:

substr(string,start,length):表示从string中的第start个位置开始截取长度为length的字符串;

例如:对于字符串str='123456',substr(str,1,3),则返回的结果为123;substr(str,-3,2),则返回的结果为45;

值得注意的就是当start为负值的时候,字符串截取起始位置为倒数第start个位置,但是截取的顺序依然是从左向右;但是length的值必须为正的!!

sys_connect_by_pathstart with......connect by prior:这两个都是针对树状结构的才可以使用,并且一般都是一起使用,当然也不是分开不可以;简单说一下语法:

sys_connect_by_path(str,sepearator):str表示字符串,sepearator为分隔符,就是将指定的字符串用指定的分隔符分隔开显示,针对上面的表结构进行示例




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值