Oracle 递归查询
现实中我们经常需要用到一些递归查询,下面我们来介绍下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 递归查询的更多相关文章
- 【转载】Oracle递归查询:使用prior实现树操作【本文出自叶德华博客】
本文标题:Oracle递归查询:使用prior实现树操作 本文链接:http://yedward.net/?id=41 本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处. Oracle ...
- 【2016-11-7】【坚持学习】【Day22】【Oracle 递归查询】
直接在oracle 递归查询语句 select * from groups start with id=:DeptId connect by prior superiorid =id 往下找 sele ...
- Oracle递归查询start with connect by prior
一.基本语法 connect by递归查询基本语法是: select 1 from 表格 start with ... connect by prior id = pId start with:表示以 ...
- Oracle递归查询,Oracle START WITH……CONNECT BY查询
Oracle递归查询,Oracle START WITH……CONNECT BY查询,Oracle树查询 ================================ ©Copyright 蕃薯耀 ...
- Oracle递归查询与常用分析函数
最近学习oracle的一些知识,发现自己sql还是很薄弱,需要继续学习,现在总结一下哈. (1)oracle递归查询 start with ... connect by prior ,至于是否向上查 ...
- SqlServer CTE 递归查询 Oracle递归查询
在做数据库设计这块,很多时候表的数据模型就是典型的二叉树结构. 于是在查询数据的时候,就涉及到了数据的递归查询. 递归查询分为两种:1.从根节点查询自身以及所有的子节点:2.从子节点查询自身以及所有的 ...
- [转]ORACLE递归查询
转自:http://www.oracle.com/technetwork/cn/articles/hartley-recursive-086819-zhs.html 递归数据库处理,也称为材料清单 或 ...
- (转载)令人迷糊的Oracle递归查询(start with)
转载地址:https://blog.csdn.net/weiwenhp/article/details/8218091 备注:如有侵权,请联系立即删除. 写代码时碰到要弄清楚Oracle的role之间 ...
- Oracle递归查询(start with)
写代码时碰到要弄清楚Oracle的role之间的传递关系,就是有role A的话,可以通过grant A to B,把A赋予给B,又通过grant B to C .那我想知道所有role中,有哪些ro ...
随机推荐
- How to upgrade gcc using apt-get ?
在toolchain/test下已经有打包好的gcc,版本有4.x.5.0.6.0等,用这个PPA升级gcc就可以啦! 首先添加ppa到库: 1 sudo add-apt-repository ppa ...
- POJ 1707 Sum of powers(伯努利数)
题目链接:http://poj.org/problem?id=1707 题意:给出n 在M为正整数且尽量小的前提下,使得n的系数均为整数. 思路: i64 Gcd(i64 x,i64 y) { if( ...
- 真心崩溃了,oracle安装完成后居然没有tnsnames.ora和listener.ora文件
problem: oracle 11 r2 64位安装完成后NETWORK/ADMIN目录下居然没有tnsnames.ora和listener.ora文件 solution: 问题是之前安装了另 ...
- fil_space_create
/*******************************************************************//** Creates a space memory obje ...
- iOS开发:UINavigationController常用操作
NavigationController常用操作: 更改bar的背景颜色:self.navigationController?.navigationBar.barTintColor =UIColor. ...
- LA 4119 (差分数列 多项式) Always an integer
题意: 给出一个形如(P)/D的多项式,其中P是n的整系数多项式,D为整数. 问是否对于所有的正整数n,该多项式的值都是整数. 分析: 可以用数学归纳法证明,若P(n)是k次多项式,则P(n+1) - ...
- [转]SQL、LINQ、Lambda
原文链接:http://www.cnblogs.com/mr-hero/p/3532631.html SQL LinqToSql Lambda 1. 查询Student表中的所有记录的Snam ...
- Java Web编程的主要组件技术——Struts入门
参考书籍:<J2EE开源编程精要15讲> Struts是一个开源的Java Web框架,很好地实现了MVC设计模式.通过一个配置文件,把各个层面的应用组件联系起来,使组件在程序层面联系较少 ...
- UVALive 4043 Ants(二分图完美匹配)
题意:每个蚁群有自己的食物源(苹果树),已知蚂蚁靠气味辨别行进方向,所以蚁群之间的行动轨迹不能重叠.现在给出坐标系中n个蚁群和n棵果树的坐标,两两配对,实现以上要求.输出的第 i 行表示第 i 个蚁群 ...
- 晶振波形、MIPI波形
/********************************************************************************** * 晶振波形.MIPI波形 * ...