SQL学习(二) 分级检索查询

SQL学习() 分级检索查询

前言

       分级检索查询(Hierarchical Retrieval)也就是我们写报表时采用的树形结构查询。虽然大家平时也在使用,但我发现其实大部分同事都是依葫画瓢,真正理解得不多。接下来我们我们就从语法系统学习下分级检索查询相关知识。

基本语法

        分级检索查询的基本语法如下:

    SELECT [LEVEL], column, expr... 

    FROM   table

   [WHERE condition(s)]

   [START WITH condition(s)]

   [CONNECT BY PRIOR condition(s)] ;

       其中语法中重要的关键字就是 START WITH CONNECT BY PRIOR

  START WITH 定义分级查询的起点

  CONNECT BY PRIOR 定义了分级查询的条件,是从上往下查询还是从下往上查询。

语句书写

例表   

       为了方便的说明,我以部门表为例,表结构和数据源如下:

       其树形结构如图所示:

起始点和查询顺序

  1.首先是起始点,这个是通过start with 定义,如:

  start with 上级id  is null

  或者

  start with id=0

       2.其次是确定显示顺序,是从上到下,还是从下到上,这个是通过CONNECT BY PRIOR 定义。

       如果我们要从上到下,那条件应该是

CONNECT BY PRIOR  id=上级id

       这里我们对其进行下讲解,CONNECT BY PRIOR 是如何判断顺序的,其语法一般为:

CONNECT BY PRIOR column1 = column2

       其中column1代表起始点数据源对应的字段,如上面的id,代表起始点数据源id, column2代表连接数据源的字段,例子中代表要连接字段的上级id,说得比较复杂,我们还是用举例来直观的说明吧。

       举个sql实际的例子:

   select id,上级id,编码,名称
   from
部门表
   Start With Id=4  

   Connect By Prior    Id    =       上级Id

         (起始数据源对应:id=4       (连接的字段)

       可以看到,起始点是辅助科室(id=4,上级id=0),顺序是从上到下,显示其以下的所有科室(车库,财务科,结账室等)

   select id,上级id,编码,名称

   from 部门表

   Start With Id=4
   Connect By Prior    
上级Id    =       Id

         (起始数据源上级id=0     (对应连接字段id

 

级数(LEVEL)  

       通过上面的例子,我们可以看到,虽然已经查询出想要的结果,但是如果不仔细看,可能不容易看出起始点,如果我们想一目了然的看到结果,那我们就需要level这个伪列,现在我们加上这个伪列在看下刚才执行结果。

   select level,id,上级id,编码,名称
   from
部门表
   Start With Id=4
   Connect By Prior    Id    =      
上级Id

 

   select level,id,上级id,编码,名称
   from
部门表
   Start With Id=4
   Connect By Prior   
上级Id    =       Id

 

限制条件

       我们在上面的例1中看到,level等级有3个,用图表示如下:

 

       现在如果想只统计到level 2,我们举2种情况的例子,如下图:

       通过分析,我们可以看到,情况1中,我们不需要提取财务室后的科室,也就是在财务室这里,查询就断掉,只需要加一个条件:名称<>’财务科,我们来执行下看。

   select level,id,上级id,编码,名称
   from
部门表
   Start With Id=4
   Connect By Prior    Id    =      
上级Id
   And 
名称<>'财务科'

 

   如果要实现情况 2,那我们只需要加个条件:level<=2就可以实现。

   select level,id,上级id,编码,名称
   from
部门表
   Start With Id=4
   Connect By Prior    Id    =      
上级Id
   And  Level<=2

      上面的语句,我们也可以用where条件进行限制,语句如下,效果是一样的。

   select level,id,上级id,编码,名称
   from
部门表

   where  Level<=2

   Start With Id=4
   Connect By Prior    Id    =      
上级Id

结语

       通过本章的学习,我想大家至少应该掌握以下几点:了解分级检索查询的概念;知道了如何定义起点和查询顺序;最后如何通过限制条件查出想要的结果。通过介绍,希望能对以后大家工作中书写报表有所帮助。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值