oracle中的层级查询操作
2013-10-24 16:11
288 查看
oracle中的层级操作非常方便,在使用之后爱不释手,以前要实现该种数据查询操作,需要非常复杂的实现过程。在oracle中通过connect by可以实现前面的目的,通常情况下层级查询基本都能实现递归查询目的。下面是connect by的使用语法:
level :层级数,是个伪列。
start with :起始记录条件,是层级查询必要条件,支持支查询操作 。
connect by :表达层级关系,通过priore表示父层级/子层级,不支持子查询操作。
priore 关键字说明:
priore 在nodeCode1 前面表示 层级查询,priore在表示以start with 作为第一级,并查询该层级以下的所有层级。
priore 在nodeCode2前面表示以start with 作为第一级,并查询该层级以上的所有层级。
/*prior在等号前面查询*/
上面语句查询结果:
/*prior在等号后面查询*/
上面语句查询结果:
从上面两个查询结果很容易理解prior位置变化的作用。
oracle 其他层级操作函数
SYS_CONNECT_BY_PATH() 函数实现层级节点合并拼接操作
查询结果
CONNECT_BY_ISLEAF特性
CONNECT_BY_ISLEAF特性可以用来判断该层级是否为叶节点,1表示叶节点.
CONNECT_BY_ROOT
CONNECT_BY_ROOT可用于读取根节点
order siblings by
oracle中的层级查询结果直接使用orader by 进行排序无法得到我们想要的结果,但可以通过order siblings 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学习(一):基本操作和基本查询语句
- 浅谈oracle树状结构层级查询
- Oracle基础学习二:表的创建 数据的操作 在VS程序中的查询显示
- Oracle笔记 十四、查询XML操作、操作系统文件
- oracle 数据库的基本操作(表空间、表、用户的创建及查询)
- oracle 部门层级查询
- 这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询。这些是所有 Oracle 开发者都必备的技能,所以快快收藏吧!
- 使用oracle 9i 里的层级查询(Hierarchical Queries)实现树状表结构的递归数据查询
- Oracle笔记 十四、查询XML操作、操作系统文件
- oracle 性能优化操作十: 分解复杂查询,用常量代替变量
- oracle 在日志中查询最近数据库操作 找回误删的数据
- oracle 查询数据库操作 找回误删的数据 v$sql
- 使用oracle 9i 里的层级查询(Hierarchical Queries)实现树状表结构的递归数据查询
- Oracle笔记 十四、查询XML操作、操作系统文件
- 终极解决sqlserver、MySQL、Oracle三种数据库模糊查询语句,ssm框架mybatis操作数据库
- Oracle常用查询表空间的操作
- 在SQL Server 2005中连接Oracle,完成查询、插入操作
- Oracle基本语法&&函数&&子查询&&分页查询&&排序&&集合操作&&高级分组函数
- Oracle 查询、更新基本操作