Oracle中start with connect by的递归查询

2020-03-17  

语法:

select … from tablename
start with 条件1
connect by 条件2
where 条件3;

 

通过这个语句,能查询出树状结构的数据

  • 条件1 是起始条件,限定树结构的起始节点
  • 条件2 是连接条件,设置递归的条件
  • 条件3 是过滤条件,对所有返回的数据进行过滤


行政区划表 xzqh

1、查南京市及以下的地区

select DM, MC, LS from xzqh
start with DM = '320100'
connect by prior DM = LS;

 

2、查江宁区及父级的地区

select DM, MC, LS from xzqh
start with DM = '320115'
connect by prior LS = DM;

 

补充说明:

  • start with 后的是限定条件,如果这个条件可以查出多个值,会把这些值作为多棵树的根节点,递归查询出多棵数状结构;start with 被省略,表示所有满足查询条件的行作为根节点
  • prior 表示上一条记录,connect by prior DM = LS,意思上一条数据的 DM 字段值是下一条数据的 LS 值,南京市的 DM 是各区的 LS,所以例1 查南京市及以下的地区
  • 根据 connect by prior 条件查询不到数据,递归结束
  • connect by 后面可以包含多个 prior 条件
  • prior 在条件2 中的顺序,影响查询方式。prior 在等号前(connect by prior DM = LS),从根节点向叶节点检索;prior 在等号后(connect by DM = prior LS),从叶节点向根节点检索
  • where 后面的条件3,可以对树状结构数据进行裁剪,即过滤出自己想要的数据
  • 可以增加 order by 排序

 

ConstXiong 备案号:苏ICP备16009629号-3