Oracle中的递归查询语法(start with...connect by prior)

来源:互联网 发布:网络电影发行合同 编辑:程序博客网 时间:2024/05/17 18:00
          首先声明,本人不是什么Oracle数据库大牛,只是把平时做项目时碰到的一些比较容易混淆的数据库知识拿出来整理一下,顺便和大家分享,我相信肯定有童鞋也会碰到这些问题。
          说到Oracle中的递归查询语法,我觉得有一些数据库基础的童鞋应该都知道,做项目的时候应该也会用到,比如在页面上展示一个机构树或目录树,就需要用的这个递归查询,数据表中一般也是用三个字段即可表示,id,name和pid,但是如果我问你递归语句中的prior放在等于号前面和后面分别代表什么含义,我相信有不少童鞋都答不上来(前两天有一个来我们公司面试的小伙子就挂在了这道题上),下面是我自己的整理,希望帮助大家理解:

    select * from table1 start with id='0' connect by prior id = parentid
    查询id等于0的节点下面的所有子节点

    select * from table1 start with id='20' connect by id = prior parentid
    查询id等于20的节点上面的所有父节点

    注:prior在“=”前面表示上一个节点(id='0'节点)的id是下一个节点的parentid
           prior在“=”后面表示下一个节点的id是上一个节点(id='20')的parentid,
           总的来说,prior在前是代表查找出给定节点的所有子节点,prior在后表示查找出给定节点的所有父节点
0 0