现实中我们经常需要用到一些递归查询,下面我们来介绍下ORACLE中递归查询的使用。

首先我们先新建一个表来存储以上信息

create table FAMILY
(
person_id INTEGER,
name VARCHAR2(10),
parent_id INTEGER
)

插入测试数据

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (1, 'Apple', 2);

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (2, 'Zoe', 4);

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (3, 'Tom', 4);

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (4, 'John', 7);

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (5, 'Peter', 6);

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (6, 'Robert', 10);

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (7, 'Mary', null);

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (8, 'Jenny', 7);

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (9, 'Sam', 10);

insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (10, 'Li Lei', null);

在Oracle中使用start with connect by prior字句实现递归查询

select t.*, level
from family t
start with t.person_id = 1
connect by t.person_id = prior t.parent_id;--找寻person_id=1的人的祖先

得到,如图我们可以得到Apple的父亲是Zoe,Zoe父亲是John,看level依次类推,Mary是他们老祖宗,

当然,我们除了可以得到某个节点的父节点,

select t.*, level
from family t
start with t.person_id = 4
connect by t.person_id = prior t.parent_id;--找寻person_id=4的人的祖先

也可以得到某个节点的子节点:

select t.*, level
from family t
start with t.person_id = 4
connect by prior t.person_id = t.parent_id;--找寻person_id=4的人的传人

得到,其中Tom跟Zoe都是John的子节点。

下一篇介绍DB2中的递归查询

Oracle 递归查询的更多相关文章

  1. 【转载】Oracle递归查询:使用prior实现树操作【本文出自叶德华博客】

    本文标题:Oracle递归查询:使用prior实现树操作 本文链接:http://yedward.net/?id=41 本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处. Oracle ...

  2. 【2016-11-7】【坚持学习】【Day22】【Oracle 递归查询】

    直接在oracle 递归查询语句 select * from groups start with id=:DeptId connect by prior superiorid =id 往下找 sele ...

  3. Oracle递归查询start with connect by prior

    一.基本语法 connect by递归查询基本语法是: select 1 from 表格 start with ... connect by prior id = pId start with:表示以 ...

  4. Oracle递归查询,Oracle START WITH……CONNECT BY查询

    Oracle递归查询,Oracle START WITH……CONNECT BY查询,Oracle树查询 ================================ ©Copyright 蕃薯耀 ...

  5. Oracle递归查询与常用分析函数

    最近学习oracle的一些知识,发现自己sql还是很薄弱,需要继续学习,现在总结一下哈. (1)oracle递归查询  start with ... connect by prior ,至于是否向上查 ...

  6. SqlServer CTE 递归查询 Oracle递归查询

    在做数据库设计这块,很多时候表的数据模型就是典型的二叉树结构. 于是在查询数据的时候,就涉及到了数据的递归查询. 递归查询分为两种:1.从根节点查询自身以及所有的子节点:2.从子节点查询自身以及所有的 ...

  7. [转]ORACLE递归查询

    转自:http://www.oracle.com/technetwork/cn/articles/hartley-recursive-086819-zhs.html 递归数据库处理,也称为材料清单 或 ...

  8. (转载)令人迷糊的Oracle递归查询(start with)

    转载地址:https://blog.csdn.net/weiwenhp/article/details/8218091 备注:如有侵权,请联系立即删除. 写代码时碰到要弄清楚Oracle的role之间 ...

  9. Oracle递归查询(start with)

    写代码时碰到要弄清楚Oracle的role之间的传递关系,就是有role A的话,可以通过grant A to B,把A赋予给B,又通过grant B to C .那我想知道所有role中,有哪些ro ...

随机推荐

  1. JVM学习笔记(四)------内存调优

    首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提 ...

  2. 【POJ】3523 The Morning after Halloween

    1. 题目描述$m \times n$的迷宫(最大为$16 \times 16$)包含最多3个点,这些点可以同时向相邻方向移动或保持停止,使用小写字母表示起始位置,使用大写字母表示中止位置.求最少经过 ...

  3. TeeChart显示三维的图形,使用Surface

    绘制一个球 根据公式x^2+y^2+z^2=R^2; 令x=RsinAcosB  y=RcosAcosB z=RsinB using System; using System.Collections. ...

  4. Redis安装教程

    1. Linux下Redis安装教程 (1)安装 #tar xf redis-2.6.14.tar.gz #cd redis-2.6.14 #make #make install (2)配置 修改re ...

  5. 1450. Russian Pipelines(spfa)

    1450 水题 最长路 #include <iostream> #include<cstdio> #include<cstring> #include<alg ...

  6. Android系列之Fragment(一)----Fragment加载到Activity当中

    Android上 的界面展示都是通过Activity实现的,Activity实在是太常用了.但是Activity也有它的局限性,同样的界面在手机上显示可能很好看, 在平板上就未必了,因为平板的屏幕非常 ...

  7. 一台电脑同时运行多个tomcat配置方法

    当第一个tomcat启动后,后面tomcat的server.xml中的端口不管怎么改,仍然会报端口冲突.后来在dos下运行才发现所有的tomcat都会去找CATALINA_HOME和CATALINA_ ...

  8. JS创建Ajax的XMLHttpRequest对象的通用方法

    function createXMLHttpRequest() { var request = false; if(window.XMLHttpRequest) { request = new XML ...

  9. vim 支持 markdown 语法

    /************************************************************************* * vim 支持 markdown 语法 * 说明 ...

  10. ffmpeg windows 雪花声解决方法

    替换所有文件里的<math.h>为<mathimf.h>即可. 我用ffmpeg-0.6.3版测试时,好像mathimf.h文件和其他文件有冲突,需要修改源码. 和qdm2.c ...