.oracle层次查询(connect by)
oracle的emp表中包含了一列mgr指出谁是雇员的经理,由于经理也是雇员,所以经理的信息也存储在emp表中。这样emp表就是一个自引用表,表中的mgr列是一个自引用列,它指向emp表中的empno列,mgr表示一个员工的管理者,
select empno,mgr,ename,sal from emp;
可以看到,要想从这些数据中提取出雇员和管理者的关系,可以使用connect by和start with字句。
语法:
select [level],column,expression,.....
from table where where_clause
start with start_condition connect by prior prior_condition
其中各参数的含义:
level:表示一个伪列,代表树的第几层
start_condition:定义了层次化查询的起点,当编写层次化查询时必须指定start with字句。
prior_condition:定义了父行和子行之间的关系,当编写层次化查询时必须定义connect by prior字句。
eg1:
select empno,mgr,ename from emp start with ename='king' connect by prior empno='mgr',结果集中mgr为空的就是根节点。
start with 指明从根节点king开始查询,使用connect by prior 让子节点的mgr指向父节点的empno。
eg2:使用伪列level
level是存在于oracle所执行的所有查询中的伪列,他是一个数值,可以指出节点在树中所处的层次,在层次化查询中,level值会将起始的根节点作为层次1,下面这个查询使用伪列level显示节点在树中的层次:
SQL>select level,empno,mgr,ename from emp start with ename='KING' connect by prior empno=mgr order by level;
上面的例子中增加了一列level,用于显示每个雇员在树中所处的层次。对根节点king来说,level返回1,根节点的子节点返回2,以此类推。
eg3:格式化层次查询结果
select level,lpad(' ',4*level-1)||ename from emp start with ename='King' connect by prior empno=mgr level lpad(' ',4*level-1)||ename
eg4:从非根节点开始遍历
select level,lpad(' ',4*level-1)||ename from emp start with ename='Jones' connect by prior empno=mgr;这个查询从Jones开始查询
eg5:在start with 字句中使用子查询
select level,lpad(' ',4*level-1)||ename from emp start with empno=(
select empno from emp where ename='Blake')
connect by prior empno=mgr
eg6:从下向上遍历树
select level,lpad(' ',4*level-1)||ename from emp start with ename='King' connect by prior empno=mgr;
eg7:从层次化查询中删除节点和分支
select level,lpad(' ',4*level-1)||ename from emp where ename!='Jones' connect by prior empno=mgr
分享到:
相关推荐
Oracle层次查询功能是Oracle数据库系统中的一个重要特性,它在关系型数据库管理中为处理具有层级关系的数据提供了便利。本文主要探讨了如何利用Oracle的层次查询功能处理和展示类似树形结构的数据。 首先,层次结构...
Oracle SELECT语句中的START WITH和CONNECT BY子句自动阻断一个层次。缺少这项特性,就需要一个复杂的自联接来确定行之间的逻辑联系。START WITH子句指定被...本文将为大家介绍如何在Oracle层次查询中给SIBLINGS排序。
高级sql关于层次查询更新 对于层次查询需要掌握: 1.解释层次查询的基本概念,识别需求中需要用到层次查询的能力。 2.建立和格式化一个树形报表(tree report)。 3.修剪树形结构的节点(node)和枝(branches)。
层次查询的概念 层次查询的语法 基本层次查询 层次查询的增强特性 CONNECT BY特殊用法示例
总结起来,Oracle层次查询和WITH函数为处理层级数据提供了强大而灵活的工具。层次查询能轻松遍历树状结构,而WITH函数则便于进行复杂的子查询操作,两者结合可以满足多种层次数据处理需求。在实际开发中,理解并熟练...
5. Oracle层次查询结果将按照特定的次序返回数据行,从而保证数据的有序显示。 需要注意的是,层次查询在使用过程中存在一些限制。首先,查询不能涉及数据表之间的JOIN连接,也不能从包含JOIN连接的视图中获取数据...
Oracle树形结构查询,层次查询,hierarchical retrieval Oracle中的树形结构查询,也被称为层次查询或hierarchical retrieval,是一种获取树形结构数据的方法。这种方法可以将数据组织成树形结构,具有层次关系的...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之递归...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
### Oracle 实战SQL层次查询详解 #### 一、层次查询概念 层次查询,也被称为树型结构查询,是在SQL中最常见的功能之一。这种查询方式主要用于处理具有层级结构的数据,例如组织架构、产品分类等场景。在Oracle...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...