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
上面语句查询结果:
1 1 厦门教育局
2 2 福建省教育厅
3 3 中华人民共和国教育部
从上面两个查询结果很容易理解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 ;
查询结果
1 1 厦门教育局 >厦门教育局
2 2 思明区教育局 >厦门教育局>思明区教育局 厦门教育局
3 2 湖里区教育局 >厦门教育局>湖里区教育局 厦门教育局
4 2 海沧区教育局 >厦门教育局>海沧区教育局 厦门教育局
5 2 集美区教育局 >厦门教育局>集美区教育局 厦门教育局
6 2 翔安区教育局 >厦门教育局>翔安区教育局 厦门教育局
7 2 同安区教育局 >厦门教育局>同安区教育局 厦门教育局
- CONNECT_BY_ISLEAF特性
CONNECT_BY_ISLEAF特性可以用来判断该层级是否为叶节点,1表示叶节点.
select level,prior ORGNAME,sys_connect_by_path(ORGNAME,'<'),decode(connect_by_isleaf, 1,'叶节点', null) "节点类型"
from ORGANIZE
where ORGTYPE = 1
start with code = '3502030039'
Connect By Prior code = PARENTCODE
查询结果
1 1 <厦门教育局
2 2 厦门教育局 <厦门教育局<思明区教育局 叶节点
3 2 厦门教育局 <厦门教育局<湖里区教育局 叶节点
4 2 厦门教育局 <厦门教育局<海沧区教育局 叶节点
5 2 厦门教育局 <厦门教育局<集美区教育局 叶节点
6 2 厦门教育局 <厦门教育局<翔安区教育局 叶节点
7 2 厦门教育局 <厦门教育局<同安区教育局 叶节点
- 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中的层级递归查询操作的更多相关文章
- 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这种形式 某个 ...
随机推荐
- Contest 20141027 总结
这次考试主要问题出在第一题,由于考试期间没有看清题意,少看了一句 “a=A/1e9" 导致在考试结束最后5分钟发现时修改过于匆忙,改出问题了.另外,这道题同时告诉我long double 在 ...
- [BZOJ 3669] [Noi2014] 魔法森林 【LCT】
题目链接:BZOJ - 3669 题目分析 如果确定了带 x 只精灵A,那么我们就是要找一条 1 到 n 的路径,满足只经过 Ai <= x 的边,而且要使经过的边中最大的 Bi 尽量小. 其实 ...
- windows下端口被占用的解决方法
1:打开CMD输入:netstat -ano | findstr "80" 找到PID: 2:查看应用名称:tasklist | findstr "2544" ...
- Nodejs and json
http://cnodejs.org/topic/51bbe16960af11cd33304b75 http://www.cnblogs.com/nano/archive/2012/05/09/249 ...
- Android程序的隐藏与退出
转自Android程序的隐藏与退出 Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁当前Activit ...
- Delphi如何让程序最小化到任务栏(截取WM_SYSCOMMAND后,调用Shell_NotifyIcon)
现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功 ...
- innodb_buffer_pool_instances and innodb_buffer_pool_size的关系
把buffer pool 分成一个用户指定的单独的区域, 每个有它自己的LRU list和相关的数据结构, 降低竞争在并发内存读取和写操作. 这个选项只有当innodb_buffer_pool_siz ...
- 对于利用ica进行fmri激活区识别的理解
首先,ica是一种探索性的方法,属于数据驱动的范畴. ica计算量很大,一般都是离线式计算. ica基于的猜想是,世界是加性的.在我们所研究的脑科学中,所采集到的BOLD信号,是由一些源信号所构成,更 ...
- Spark(Hive) SQL中UDF的使用(Python)
相对于使用MapReduce或者Spark Application的方式进行数据分析,使用Hive SQL或Spark SQL能为我们省去不少的代码工作量,而Hive SQL或Spark SQL本身内 ...
- 成为Web开发人员的7个简单步骤
你想成为一名 Web 开发人员,但现在你面前有这样一个问题,那就是你没有在高科技行业工作的经验.你上了一些课程,也花了时间在个人编码项目上,但是你的简历上关于“经验”的部分仍然不为企业承认.过渡到一个 ...