- 浏览: 1415588 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (363)
- oracle (43)
- 缓存策略 (4)
- 数据库设计 (7)
- IntelliJ IDEA (8)
- freemarker (3)
- JSP (12)
- java基础 (75)
- tomcat (14)
- 服务器 (10)
- maven (3)
- linux (21)
- e-learning (2)
- 手机开发 (1)
- 设计模式 (6)
- 技术之外 (2)
- 工具的使用 (8)
- HTML 5 (5)
- 网站前台 (38)
- 网站后台 (11)
- 项目管理 (12)
- 面试题 (5)
- 幽默 (0)
- 系统架构 (8)
- 创业 (10)
- div-css (5)
- 诗词歌赋 (1)
- 网络课堂组知识库 (4)
- 杂家 (3)
- android (12)
- 框架 (14)
- 读书笔记 (1)
- 孙子兵法 (1)
- mysql (3)
- 小人书 (0)
- Jquery (6)
- eclipse (2)
- 正则表达式 (1)
最新评论
-
a98709474:
写的很详细,看完了,明白了这种概念了
数据库水平切分(拆库拆表)的实现原理解析(转) -
a98709474:
MYSQL分库分表总结 -
CatchU:
7年前的招聘要求,厉害厉害
面试要求 -
luozhixiong:
<table class="bbcode&qu ...
MYSQL分库分表总结 -
沈寅麟:
好用
freemarker格式化
Oracle树查询的最重要的就是select...start with... connect by ...prior 语法了。依托于该语法,我们可以将一个表形结构的中以树的顺序列出来。
PARENT_ID存储的是上级ID,如果是顶级父节点,该PARENT_ID为0
1. 查找树中的所有顶级父节点
2.查找一个节点的直属子节点(所有儿子)
3.查找一个节点的所有 直属子节点(所有后代)
4.查找一个节点的直属父节点(父亲)
5.查找一个节点的所有直属父节点(祖宗)
这里查找的就是ID为363的所有直属父节点,打个比方就是找到一个人的父亲、祖父等。但是值得注意的是这个查询出来的结果的顺序是先列出子类节点再列出父类节点,姑且认为是个倒序吧。
上面列出两个树型查询方式,第3条语句和第5条语句,这两条语句之间的区别在于prior关键字的位置不同,所以决定了查询的方式不同。
当parent_id=PRIOR ID时,数据库会根据当前的ID迭代出parent_id与该ID相同的记录,所以查询的结果是迭代出了所有的子类记录;而PRIOR ID=parent_id时,数据库会跟据当前的parent_id来迭代出与当前的parent_id相同的id的记录,所以查询出来的结果就是所有的父类结果。
以下是一系列针对树结构的更深层次的查询,这里的查询不一定是最优的查询方式,或许只是其中的一种实现而已。
6.查询一个节点的兄弟节点(亲兄弟)
7.名称要列出名称全部路径
11.列出当前节点的根节点
12.列出当前节点是否为叶子
create table SECURITY_RES_CATEGORY ( ID NUMBER(6) not null, NAME VARCHAR2(100), DESCRIPTION VARCHAR2(200), PARENT_ID NUMBER(6), APP_ID NUMBER(3), STATUS NUMBER(1) default 1 )
PARENT_ID存储的是上级ID,如果是顶级父节点,该PARENT_ID为0
引用
表中最好别有null记录,这会引起全文扫描,建议使用0代替
1. 查找树中的所有顶级父节点
select * from security_res_category where parent_id=0
2.查找一个节点的直属子节点(所有儿子)
select * from security_res_category where parent_id=361
3.查找一个节点的所有 直属子节点(所有后代)
select * from security_res_category where app_id=181 START WITH ID=361 CONNECT BY parent_id = PRIOR ID;
4.查找一个节点的直属父节点(父亲)
SELECT b.* FROM security_res_category a JOIN security_res_category b ON a.parent_id = b.ID WHERE a.ID = 261;
5.查找一个节点的所有直属父节点(祖宗)
SELECT * FROM security_res_category START WITH ID = 363 CONNECT BY PRIOR parent_id = ID;
这里查找的就是ID为363的所有直属父节点,打个比方就是找到一个人的父亲、祖父等。但是值得注意的是这个查询出来的结果的顺序是先列出子类节点再列出父类节点,姑且认为是个倒序吧。
上面列出两个树型查询方式,第3条语句和第5条语句,这两条语句之间的区别在于prior关键字的位置不同,所以决定了查询的方式不同。
当parent_id=PRIOR ID时,数据库会根据当前的ID迭代出parent_id与该ID相同的记录,所以查询的结果是迭代出了所有的子类记录;而PRIOR ID=parent_id时,数据库会跟据当前的parent_id来迭代出与当前的parent_id相同的id的记录,所以查询出来的结果就是所有的父类结果。
以下是一系列针对树结构的更深层次的查询,这里的查询不一定是最优的查询方式,或许只是其中的一种实现而已。
6.查询一个节点的兄弟节点(亲兄弟)
select * from security_res_category where parent_id= (select parent_id from security_res_category where id=363)
7.名称要列出名称全部路径
SELECT SYS_CONNECT_BY_PATH (mc, '/') FROM security_res_category WHERE ID = 6498 START WITH parent_id=0 CONNECT BY parent_id = PRIOR ID
11.列出当前节点的根节点
SELECT CONNECT_BY_ROOT name, security_res_category.* FROM security_res_category where id=363 START WITH parent_id=0 CONNECT BY PRIOR id = parent_id;
12.列出当前节点是否为叶子
SELECT CONNECT_BY_ISLEAF, security_res_category.* FROM security_res_category where id=963 START WITH parent_id=0 CONNECT BY parent_id = PRIOR ID;
发表评论
-
一对多关系中,查没儿子的记录语句
2014-09-04 12:05 922SELECT B.* FROM tbl_mall_orde ... -
关于数据库反向索引
2014-03-24 14:24 1016反向索引与平时的常用索引不同的是,它将要增加索引的列的数据按字 ... -
常用SQL
2013-05-07 11:29 1184select to_date('2013-04-17 13:2 ... -
oracle重建索引
2012-10-20 17:39 1042alter index SYS_C0010453 rebu ... -
数据库无法启动问题
2012-09-12 09:55 1114登录数据库时提示:ORA-12514: TNS: 监听程序当前 ... -
group + decode
2012-09-07 16:07 926SELECT G.PO_ID, G.PROD_ ... -
两个日期相差几天
2012-09-05 22:33 1165SELECT trunc(sysdate-TO_date('2 ... -
复制一行记录 insert into select
2012-09-04 16:38 1320insert into tb_sys_menu (men ... -
父游标、子游标及共享游标
2012-07-20 09:26 1233游标是数据库领域较为 ... -
最好的分页
2012-07-19 23:00 946select t2.prod_id, t2.prod_name ... -
Druid 德鲁依
2012-03-21 14:22 1035Druid是一个JDBC组件,它包括三部分: DruidD ... -
ORACLE user_objects 表
2012-03-09 13:36 67751. OBJECT_TYPE select distinct( ... -
oracle net manager
2011-12-03 08:25 896url="jdbc:oracle:thin:@192 ... -
数据库视图的优点
2011-11-22 13:06 1153限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽创建视 ... -
悲观锁与乐观锁
2011-10-18 14:05 951... -
pl /sql导入表结构或者数据
2011-09-22 14:03 1333导出表结构: Tools-->Export User ... -
查询重复记录
2011-09-21 12:06 502select * from order_ticket ot W ... -
数据库有哪些缓存策略?
2011-09-01 15:03 18641:Query Cache 以SQL作为key值缓存查询 ... -
Oracle instr函数
2011-08-24 15:49 1060在Oracle中,可以使用instr函数对某个字符串进行判断, ... -
ORACLE的sign函数 和 DECODE函数
2011-08-24 15:00 41801:比较大小函数 SIGN sign()函数根据某个值是0 ...
相关推荐
Oracle树查询及相关函数!,希望有助于大家的学习!
oracle语句非常强大,支持各种函数的查询,解决实际复杂的业务逻辑问题,比如:对一个表的父子查询,迭代查询等,这篇文档教你很快掌握oracle的树形结构查询,欢迎下载!
第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发...
第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发...
第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发...
第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。 如果您是开发...
内含很多oracle的语法和常用函数,包括 对于oracle进行简单树查询(递归查询),oracle内置函数大全, PLSQL 编程手册(SQL大全),及分页建表等很多学习资料。
模式和便于存储、检索、更新、查询的函数集。它由以下组件构 成:一种描述几何数据存储、语法、语义的模式MDSYS;一种空间 索引机制SDO—INDEX;一组实现感兴趣区域查询和空间联合查 询的算子和函数;一组管理工具 ...
oracle函数大全.chm
expimp导出导入工具的使用.doc,Oracle 单记录函数.doc,Oracle 的内存管理.ppt,Oracle9I计划管理表空间.pdf,Oracle备份与恢复.doc,Oracle返回树关系列表Sql.doc,Oracle里时间的应用.doc,Oracle体系结构概述....
主要给大家介绍了关于Oracle如何通过递归查询父子兄弟节点的相关资料,递归查询对各位程序员来说应该都不陌生,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...
《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...
Oracle是当今各领域中应用比较广泛的一个大型关系型数据库产品,它以其所拥有的稳定、可伸缩性强以及安全可靠等...读者对象:面向各种培训班学员,高校相关专业的学生, Oracle应用开发人员以及Oracle数据库的学习者。