- 浏览: 1240092 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
oracle的家族树介绍
oracle的家族树为oracle的fens提供了一个很方便的从顶向底,或者从底到顶的查找功能.语法如下:
select column from table_name start with column=value
connect by prior 父主键=子主键
我下面以一个简单的公司雇员为例(就是上下级的信息放在一张表里,但是有一个字段来关联上下级的信息),具体解释oracle的家族树的用法:
表 t_emptree:
1)建表语句:
ENAME VARCHAR2(20) primary key not null, ----职员名称
EMPNO NUMBER not null, -----职员编号
MGR NUMBER default 0 not null ---上级编号
2)插入数据:
3)1、从顶到底列出雇员boss的下属信息
SQL> select ename,empno,mgr from t_emptree start with mgr=0
2 connect by prior empno=mgr;
注:因为mgr的type是number所以使用mgr=0。在一般情况下mgr上级编号的type
是varchar2所以使用mgr is null.
start with :表示从哪一条记录开始查。在这儿表示从mgr=0开始查,即从最高的父级开始从上往下查,查出boss的直属下属和其他的下属。
connect by prior:表示根据子主键(mgr)开始查起。 如果反过来,则是根据父主键(empno)查起。
2.使用参数level从顶到底列出雇员boss的下属信息
SQL> select ename,empno,mgr,level from t_emptree start with mgr=0
2 connect by prior empno=mgr;
Level:是伪列,表示深度
3.使用参数lpad()
SQL> select lpad('*',4*(level-1),'#')||ename name,empno,mgr,level from t_emptree
2 start with mgr=0
3 connect by prior empno=mgr;
lpad( string1, padded_length, [ pad_string ] ): LPad的意思在某个值的左边加上一定的字符,默认的情况下是空格,也就是说,如果等级是一那么就加一个空格,如果是2那么就加两个空格。
例如:lpad('* ',4*(level-1),’#’)||(注:“||”是必须的)
第一个参数string1(’* ’)表示:在我查询的第一个字段(用||分割)ename的左边加一个字符“*”。
第二个参数padded_length(4*(level-1))表示:根据level 添加不同数目(4*(level-1)-1)个的第三个参数(pad_string)(比如level=2时就添加4个string,其中一个“*”和3个“#”)。
第三个参数pad_string(“#”)表示:显示根据第二个参数的数量减一后的“#”个数。(也就是说,第三个参数显示的数量加上第一个参数显示的数量必须等于第 二个参数的数量)
在一般情况下:
第一个参数是必写的一般是空格。
第二个参数是必写的一般都使用level来进行计算。“||”也是必写的
第三个参数可以不写,默认为空格。
4、遍历至根(从上至下或从下至上)
a)从某个雇员开始向他的上级列出该雇员的层次结构,如他的直接上司,以及其他的上司。(从底到顶)
SQL> col ename for a30;
SQL> select lpad(' ',4*(level-1))||ename ename,mgr,empno,level from t_emptree
2 start with mgr=4 connect by prior mgr=empno;
col ename for a30:指定列的输出格式: 30个固定字符长度,如果字段的实际长度超过30个字符,那么会换下一行显示.(也可以是a20,a60等)。
b)从某个雇员开始向下列出该雇员的层次结构,如他的直接下属,以及其他的下属。(从顶到底)
SQL>select lpad(' ',4*(level-1))||ename ename,mgr,empno,level from t_emptree
start with mgr=4 connect by prior empno=mgr;
注:connect by prior父主键=子主键:表示根据子主键(mgr)开始查起(一般是从顶到底)。 如果反过来,则是根据父主键(empno)查起(一般是从底到顶)。
5.列出所有雇员的层次结构
a) 这个子句可以很清楚的完成整个树的从底到顶的遍历功能。(因为条件start with mgr<>0放宽限定条件,以取得多个根结点,实际就是多棵树。所以他清楚的列出了每一个职员的树结构。)
SQL> select lpad(' ',4*(level-1))||ename ename,empno,mgr,level from t_emptree
2 start with mgr<>0
3 connect by empno=prior mgr;(or connect by prior mgr=empno;)
b) 这个子句可以很清楚的完成整个树的从顶到底的遍历功能。(因为条件start with mgr<>0放宽限定条件,以取得多个根结点,实际就是多棵树。所以他清楚的列出了每一个职员的树结构。但是因为mgr<>0所以没有显示boss)
SQL>select lpad(' ',4*(level-1))||ename ename,empno,mgr,level from t_emptree
start with mgr<>0
connect by prior empno=mgr(or connect by mgr=prior empno)
Prior: PRIOR表示上一条记录,比如 CONNECT BY PRIOR empno=mgr就是说上一条记录的empno是本条记录的mgr,即本记录的父亲是上一条记录。同理CONNECT BY PRIOR mgr=empno就是说上一条纪录的mgr是本条纪录的empno,即本纪录的儿子是上一条纪录。
注意由上层向下层递归与下层向上层递归的区别在于START WITH...CONNECT BY PRIOR...的先后顺序以及 empno= mgr和 mgr = empno 的微小变化!
发表评论
-
Jdbc执行很慢,而PLSQL执行快的问题解决
2016-04-14 13:51 12325最近在检查一方法时发现程序执行SQL查询时非常慢,但使用P ... -
org.apache.commons.dbcp.DbcpException: java.sql.SQLException: 不能在 UTF8 和 UCS2 之间
2016-04-07 14:13 1042今天生产环境tomcat启动后,用户登录时系统报错:java ... -
rollup()和rollup(())的区别
2015-08-21 14:50 732引用:http://blog.csdn.net/damen ... -
Oracle hint
2014-09-25 12:31 644转自:http://www.cnblogs.com/ebs ... -
Oracle hint用法
2014-09-25 12:12 5031. /*+ALL_ROWS*/ 表明对语 ... -
Oracle表与索引的分析及索引重建
2014-09-25 12:09 771转自:http://www.cnblogs.co ... -
Oracle的优化器的RBO和CBO方式
2014-09-25 11:30 449转自:http://www.blogjava.net/wx ... -
P6Spy SQL语句拦截工具
2013-08-20 15:58 2071P6Spy P6Spy 是一个可 ... -
ORACLE快照原理及实现总结
2013-03-18 13:23 4246转:http://blog.csdn.net/lingo0 ... -
plsql developer 使用技巧
2013-01-25 17:48 1222plsql developer 使用技巧 Oracle数据 ... -
Oracle字符集查看及修改
2012-12-12 17:04 826Oracle字符集查看及修改 http://blog.csd ... -
Oracle性能优化系列
2012-12-04 13:41 883Oracle删除重复数据的一种高效的方法 Oracle性能优化 ... -
java.sql.SQLException: Io 异常: Got minus one from a read call
2012-12-04 11:14 36228Tomcat服务器下的应用连接Oracle时报错,出现以下异常 ... -
Oracle中round() 函数与trunc()函数的比较
2012-11-29 14:32 936转:http://blog.sina.com.cn/s/blo ... -
Oracle百万记录sql语句优化技巧
2012-11-12 14:56 931转:http://www.cnblogs.com/er ... -
Oracle 获取当前日期及日期格式
2012-11-05 16:26 1017转自:http://blog.sina.com.cn/s/bl ... -
Oracle CASE WHEN 用法介绍
2012-11-05 16:19 773转:http://www.cnblogs.com/eshizh ... -
ORACLE 日期加减操作
2012-11-05 15:14 772转自:http://www.cnblogs.c ... -
update关联更新在sqlserver和oracle中的实现[转]
2012-09-18 16:23 1030from: http://www.webjx.com/html ... -
plsql developer导入导出数据库方法
2012-06-15 14:23 1278转:http://blog.csdn.net/leeli198 ...
相关推荐
Oracle 基于树结构查询详解 Oracle 基于树结构查询是一种高效的查询方式,特别在处理树型结构数据时。树结构查询可以快速地检索树型结构数据,并且可以根据实际需求进行查询优化。 树结构查询的基本概念: 树结构...
例如,它可以将每个节点的路径作为字符串返回,便于理解和分析树结构。 在实际应用中,例如组织结构的展示,我们可以创建一个包含部门信息的表`SYS_DEPT`,其中`dept_id`为主键,`par_dept_id`表示父级部门ID,以此...
Oracle数据库提供了强大的查询功能,使得对这类树形结构数据的查询变得简单而高效。本文将深入探讨如何使用Oracle的特定查询语法来检索树形结构数据。 首先,要了解的是,在Oracle中,树形结构数据的查询主要依赖于...
Oracle 数据库树形结构用法总结,例如SYS_CONNECT_BY_PATH 、START WITH . . . CONNECT BY . . .等具体语法介绍
在处理复杂的数据查询时,尤其在数据具有层次性或树状结构的情况下,Oracle提供了一种高效的方法——树结构查询。本篇文章将深入探讨Oracle如何处理这类查询,并通过一个具体的文档案例进行解析。 首先,我们要了解...
树结构查询在Oracle中可以通过`CONNECT BY`和`START WITH`子句实现。`CONNECT BY`子句用于定义层次关系,它表明数据将按照层次顺序检索,通过指定的列(如EMPNO和MGR)连接形成树状结构。`PRIOR`关键字用于指示父...
Oracle树形结构查询,层次查询,hierarchical retrieval Oracle中的树形结构查询,也被称为层次查询或hierarchical retrieval,是一种获取树形结构数据的方法。这种方法可以将数据组织成树形结构,具有层次关系的...
oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询
Oracle 数据库在处理树形数据结构时,提供了一...例如,对于大型树结构,可能需要考虑索引、并行查询、分区等优化手段。同时,理解这些查询如何工作,以及它们在不同情况下的表现,对于数据库设计和查询优化至关重要。
在Oracle数据库中,进行树状结构查询是一种常见且强大的功能,尤其当数据具有层次或层级关系时,如组织架构、产品分类、文件系统等。本文将深入探讨如何在Oracle中执行树状结构查询,理解其背后的逻辑,以及如何利用...
Oracle树查询是数据库管理中处理层次结构数据的重要技术,它主要依赖于`SELECT...START WITH...CONNECT BY...PRIOR`的语法。这个语法允许我们按照树的结构来组织和检索数据,尤其适用于表示组织结构、目录层级或者...
通过指定起始节点(START WITH)和连接条件(CONNECT BY),我们可以构建出一个递归查询,从而获取整个树结构。 例如,假设我们有一个部门表DEPARTMENTS,包含ID(主键)、PARENT_ID(父ID)和NAME(部门名称)字段...
Oracle树查询是数据库管理中一种非常实用的技术,它允许我们处理具有层级关系的数据。在Oracle中,树查询主要依赖于`SELECT...START WITH...CONNECT BY...PRIOR`语法,这个语法让我们能够按照层级结构遍历数据。本文...
### Oracle树查询详解 在Oracle数据库中,进行树状结构数据查询时,通常会使用到特定的查询语法,包括`START WITH`、`CONNECT BY PRIOR`等关键字。本文将详细介绍这些关键字及其应用场景,并通过具体示例来帮助理解...
`START WITH`子句用于指定查询的起始节点,也就是树结构中的根节点或者你想要从哪个节点开始遍历。在给定的例子中,如果我们要从ID为7839的员工(假设是经理)开始查找其下属员工,`START WITH`会这样写:`START ...
在数据库系统中实现树结构表递归查询是一种常见的需求,它允许我们查询出具有层级关系的数据。ORACLE、MSSQL(Microsoft SQL Server)、MYSQL是三大主流数据库系统,它们各自提供了不同的方式来实现递归查询。 首先...
常用取树结构方法,包括获取当前节点的层级,获取当前节点到根节点的完整树叶路径
在Oracle数据库中,将查询结果转化为树状结构是一项高级而实用的技能,尤其适用于处理具有层级关系的数据,如产品分类、组织架构等。本篇将深入解析如何利用Oracle的特定功能,实现数据的树状展示。 ### 核心概念:...
在本例中,"oracle树形结构"可能指的是利用Oracle数据库存储和查询树形结构数据的方法。这可能涉及到创建适当的表结构,定义父子节点关系的字段,以及编写查询语句来获取层级数据。查询可能包括查找特定节点的所有子...