oracle中的倒递归查询,oracle中的层级递归查询操作

oracle中的层级操作非常方便,在使用之后爱不释手,以前要实现该种数据查询操作,需要非常复杂的实现过程。在oracle中通过connect by可以实现前面的目的,通常情况下层级查询基本都能实现递归查询目的。下面是connect by的使用语法:

select [level], column, expr...

from table

[where condition]

start with condition

connect by [prior nodeCode1 = nodeCode2 | nodeCode1 = prior nodeCode2];

level :层级数,是个伪列。

start with :起始记录条件,是层级查询必要条件,支持支查询操作 。

connect by :表达层级关系,通过priore表示父层级/子层级,不支持子查询操作。

priore 关键字说明:

priore 在nodeCode1 前面表示 层级查询,priore在表示以start with 作为第一级,并查询该层级以下的所有层级。

priore 在nodeCode2前面表示以start with 作为第一级,并查询该层级以上的所有层级。

/*prior在等号前面查询*/

select *

from ORGANIZE

where ORGTYPE = 1

start with code = '3502030039'

Connect By Prior code = PARENTCODE

上面语句查询结果:

1厦门教育局

2思明区教育局

3湖里区教育局

4海沧区教育局

5集美区教育局

6翔安区教育局

7同安区教育局

/*prior在等号后面查询*/

select *

from ORGANIZE

where ORGTYPE = 1

start with code = '3502030039'

Connect By code = Prior PARENTCODE

上面语句查询结果:

11厦门教育局

22福建省教育厅

33中华人民共和国教育部

从上面两个查询结果很容易理解prior位置变化的作用。

oracle 其他层级操作函数

SYS_CONNECT_BY_PATH() 函数实现层级节点合并拼接操作

select level,ORGNAME,sys_connect_by_path(ORGNAME,'>') [合并层级], prior ORGNAME [父节点]

from ORGANIZE

where ORGTYPE = 1

start with code = '3502030039'

Connect By Prior code = PARENTCODE ;

查询结果

11厦门教育局>厦门教育局

22思明区教育局>厦门教育局>思明区教育局厦门教育局

32湖里区教育局>厦门教育局>湖里区教育局厦门教育局

42海沧区教育局>厦门教育局>海沧区教育局厦门教育局

52集美区教育局>厦门教育局>集美区教育局厦门教育局

62翔安区教育局>厦门教育局>翔安区教育局厦门教育局

72同安区教育局>厦门教育局>同安区教育局厦门教育局

CONNECT_BY_ISLEAF特性

CONNECT_BY_ISLEAF特性可以用来判断该层级是否为叶节点,1表示叶节点.

select level,prior ORGNAME,sys_connect_by_path(ORGNAME,'

from ORGANIZE

where ORGTYPE = 1

start with code = '3502030039'

Connect By Prior code = PARENTCODE

查询结果

11

22厦门教育局

32厦门教育局

42厦门教育局

52厦门教育局

62厦门教育局

72厦门教育局

CONNECT_BY_ROOT

CONNECT_BY_ROOT可用于读取根节点

select

level,ORGNAME ,prior  ORGNAME "父节点",

sys_connect_by_path(ORGNAME,'

decode(connect_by_isleaf, 1,'叶节点', null) "节点类型" ,

connect_by_root  ORGNAME "根节点"

from ORGANIZE

where ORGTYPE = 1

start with code = '3502030039'

Connect By Prior  code =  PARENTCODE

查询结果

LEVEL    ORGNAME     父节点     节点合并     节点类型    根节点

1    厦门教育局        

2    思明区教育局    厦门教育局    

2    湖里区教育局    厦门教育局    

2    海沧区教育局    厦门教育局    

2    集美区教育局    厦门教育局    

2    翔安区教育局    厦门教育局    

2    同安区教育局    厦门教育局    

order  siblings  by

oracle中的层级查询结果直接使用orader by 进行排序无法得到我们想要的结果,但可以通过order  siblings  by达到我们想要的既按照层级排序,又按照字段排序

oracle 中proc和oci操作对缓存不同处理

oracle 中proc和oci操作对缓存不同处理

对oracle中date/timestamp的操作

设置oracle中date的会话格式为 'yyyy-mm-dd hh24:mi:ss' alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss ...

Oracle中日期时间的操作比较和加减-入门基础(转)

Oracle关于时间/日期的操作     1.日期时间间隔操作 当前时间减去7分钟的时间 select sysdate,sysdate - interval '7' MINUTE from dual ...

oracle中有关表的操作

在Oracle中查看所有的表: select * from tab/dba_tables/dba_objects/cat; 看用户建立的表 : select table_name from user_ ...

Oracle中快速查询和操作某个用户下的所有表数据信息

一.禁止所有的外键约束 在pl/sql developer下执行如下语句:SELECT 'ALTER TABLE ' || table_name || ' disable CONSTRAINT ' | ...

Oracle中字段的修改操作语法

对字段操作 操作方法 更新字段名 alter table TABLE_NAME rename column column_old to column_new; 添加字段 alter table T ...

Oracle “CONNECT BY” (层级递归查询)

Oracle “CONNECT BY”是层次查询子句,一般用于树状或者层次结果集的查询.其语法是: ? 1 2 [ START WITH condition ] CONNECT BY [ NOCYCL ...

ORACLE中用户等系统信息操作

1.查看所有用户:select * from dba_users;   select * from all_users;   select * from user_users; 2.查看用户或角色系统 ...

oracle 中关于null的操作

空值 空值一般用NULL表示 一般表示未知的.不确定的值,也不是空格 一般运算符与其进行运算时,都会为空 空不与任何值相等 表示某个列为空用:IS NULL  不能使用COMM=NULL这种形式 某个 ...

随机推荐

Jquery 下实现 图片大图预览效果

Fiddler On Linux

参考链接: http://www.development-cycle.com/2013/08/debugging-web-applications-with-fiddler-on-linux/ htt ...

records.config文件配置模板

# # # Process Records Config File # #

洛谷 [P3973] 线性代数

最大权闭合子图,神题 这不是线性代数,这是网络流. 我们看见这是一堆矩阵的运算,而且最后变成了一个数,那么我们就想到,把这个矩阵乘法的过程用具体的数字推出来 我们发现,a是一个01矩阵,然后其实就可以 ...

安卓---RedioButton(单选按钮)、CheckBox(复选按钮)

C# 函数 递归

函数:独立完成某项功能的一个个体,有固定功能函数有 高度抽象函数. 作用: 提高代码的重用性 提高功能开发的效率 提高程序代码的可维护性 函数四要素:   输入       输出       函数名  ...

Visual Studio 2019 preview中体验C# 8.0新语法

准备工作: Visual Studio 2019 Preview版本中并没有包含所有的C# 8.0的新功能,但目前也有一些可以试用了.在开始之前,需要进行入两项设置: 将Framework设置为.ne ...

PAT 1001 害死人不偿命的(3n+1)猜想

1001 害死人不偿命的(3n+1)猜想 (15 分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复 ...

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值