现实中我们经常需要用到一些递归查询,下面我们来介绍下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. 自定义View(5)Paint常用的一些绘制滤镜,特效等介绍

    Shader 返回绘图过程中重复色块的基类 相关方法:Paint::setShader(Shader shader) BitmapShader 从位图加载重复色块 LinearGradient, Ra ...

  2. [Codeforces673A]Bear and Game(水题,思路)

    题目链接:http://codeforces.com/contest/673/problem/A 题意:一个人看一个90分钟的节目,然后告诉你一些有趣的时刻.这个人假如在15分钟内还没有看到有趣的时刻 ...

  3. hdu 4882 ZCC Loves Codefires (贪心 推导)

    题目链接 做题的时候凑的规律,其实可以 用式子推一下的. 题意:n对数,每对数有e,k, 按照题目的要求(可以看下面的Hint就明白了)求最小的值. 分析:假设现在总的是sum, 有两个e1 k1 e ...

  4. uva10820Send a Table

    筛法. 首先使cnt[i]=sqr(n/i),这样cnt[i]就表示gcd(x,y)大于等于i的数对的个数,然后倒序枚举减去gcd大于i的个数就可以得到ans[i].最终得到ans[1]. 这个算法单 ...

  5. WEB-INF目录与META-INF目录的作用

    /WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/包含了站点所有用的 class 文件,包括 ser ...

  6. I.MX6 Android netperf

    /***************************************************************************** * I.MX6 Android netpe ...

  7. Gulp使用指南

    Grunt靠边,全新的建构工具来了.Gulp的code-over-configuration不只让撰写任务(tasks)更加容易,也更好阅读及维护. Glup使用node.js串流(streams)让 ...

  8. 最简单的视音频播放示例7:SDL2播放RGB/YUV

    本文记录SDL播放视频的技术.在这里使用的版本是SDL2.实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API.在Windows平台下,SDL封装了Direct3D这类的API ...

  9. PS流格式

    概念: 将具有共同时间基准的一个或多个PES组合(复合)而成的单一的数据流称为节目流(Program Stream). ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码 ...

  10. css3制作优惠券

    <div class="demo-container demo"><style> .demo{width:410px;} .stamp *{padding: ...