这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点。

先看原始数据:

 1 create table a_test2 ( parentid varchar2(10),3   subid    varchar2(10));4 5 insert into a_test values ( '1', '2' );6 insert into a_test values ( '1', '3' );7 insert into a_test values ( '2', '4' );8 insert into a_test values ( '2', '5' );9 insert into a_test values ( '3', '6' );
10 insert into a_test values ( '3', '7' );
11 insert into a_test values ( '5', '8' );
12 insert into a_test values ( '5', '9' );
13 insert into a_test values ( '7', '10' );
14 insert into a_test values ( '7', '11' );
15 insert into a_test values ( '10', '12' );
16 insert into a_test values ( '10', '13' );
17
18 commit;
19
20 select * from a_test;

对应B树结构为:


接下来看一个示例:

要求给出其中一个结点值,求其最终父结点。以7为例,看一下代码

start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。

connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subid放在一起,则往叶子结点方向遍历,

parentid、subid两列谁放在“=”前都无所谓,关键是prior跟谁在一起。

order by 子句:排序,不用多说。

--------------------------------------------------

下面看看往叶子结点遍历的例子:

这里start with 子句用了parentid列,具体区别后面举例说明。

connect by 子句中,prior跟subid在同一边,就是往叶子结点方向遍历去了。因为7有两个子结点,所以第一级中有两个结果(10和11),10有两个子结点(12,13),11无,所以第二级也有两个结果(12,13)。即12,13就是叶子结点。





下面看下start with子句中选择不同的列的区别:

以查询叶子结点(往下遍历)为例

结果很明显,原意是要以7为父结点,遍历其子结点,左图取的是父结点列的值,结果符合原意;右图取的是子结点列的值,结果多余的显示了7 的父结点3.

---------------------------------------

关于where条件的语句,以后验证后再记录。先留个疑问

oracle中的start with connect by用法相关推荐

  1. oracle中start with和connect by的用法理解

    Oracle中start with和connect by 用法理解 转自:http://www.blogjava.net/xzclog/archive/2010/03/05/314642.html,多 ...

  2. Oracle中start with xx connect by prior 语句解析

    Oracle中start with xx connect by prior 语句解析 ​ Oracle这种的start with语句主要对B型树的数据进行递归查询.可以指定数据树上的任一节点,然后查找 ...

  3. 1.oracle中的exists 和not exists 用法:

    1.oracle中的exists 和not exists 用法: exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表A ID NAME 1 A1 ...

  4. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  5. oracle中pivot的用法,oracle中pivot的实现原理和用法

    考试大Oracle站整理: 1. 11g之前的行列转换面试 领袖又说了:"温故而知新".那就让咱们先看看11g之前是怎么实现地.行列转换一直看成甄别老手和新手的试金石,面试的时候面 ...

  6. oracle中的exists 和not exists 用法详解

    有两个简单例子,以说明 "exists"和"in"的效率问题 1) select * from T1 where exists(select 1 from T2 ...

  7. oracle中SQL语句ge的用法,Oracle中SQL语句的几种用法

    在诊断数据库系统性能的过程中,总会涉及到跟踪效率低下的SQL语句,Oracle数据库10g包含一种新的实用程序trcsess,它可以让您基于会话ID或模块名称之类的条件,有选择地从大量跟踪文件中抽取出 ...

  8. oracle中update,insert,delete的高级用法

    一.对视图的更新. update,insert,delete除了可以作用于单表,还可以作用于视图.子查询,但是有种种限制. 视图(子查询)的限制:   1.没有集合操作符(并.差.交): 2.没有DI ...

  9. oracle+union+连接,Oracle中union/union all/Intersect/Minus用法

    Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All,对两个结果集进行并集操作,包括重复行,不进行排序: Intersect,对两个结果集进行交集操作,不包 ...

最新文章

  1. 简单dp ---HDU3485 Count 101
  2. 【题解】P4124 [CQOI2016]手机号码
  3. 前端图片有时候能显示有时候不显示_如何自动搞定全站图片的alt属性?
  4. HTTP基础及基本配置
  5. Boost:获取随机数的实例
  6. Realsense的使用
  7. 实际开发的存储过程_实际生产中的 Android SDK开发总结| 完结
  8. 反向链接referrer的原理
  9. html怎么让背景颜色百分比,jquery – CSS设置背景颜色只是表行宽度的一个百分比...
  10. C语言学生信息管理系统源代码
  11. 深度学习之MNIST数据集
  12. 第三次打卡 特征工程
  13. 23 种设计模式的分类 - Design Patterns
  14. 什么是TPM设备管理系统?本文来告诉你
  15. 代理IP的直接转发与隧道转发
  16. 作品展第二周——痛并快乐着
  17. 微软Excel 2007 打勾方框/框里打勾
  18. Windows 8 简体中文 官方正式版 原版镜像下载
  19. 怎么分析出京东快递物流多次派件的单号
  20. 品优购项目html+css+js

热门文章

  1. 工信部确定5G使用频段 产业链即将迎来变革
  2. Flutter2 的 Sound null safety ?!以及发布pub上面的null safety标签实现
  3. 电脑无规律无响应,鼠标能动但是点击无反应一直在转圈。
  4. ubuntu16.04下运行Drcom客户端
  5. 领英封号怎么办,如何避免封号?
  6. WORKNC基础到进阶视频教程
  7. 一个简单的app爬虫:对近期热播剧《三十而已》进行知乎app关键词搜索
  8. 电脑上的日期从1980年到2099年
  9. Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(九十二)
  10. db mysql error_list