oracle中的start with connect by用法
这个子句主要是用于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用法相关推荐
- oracle中start with和connect by的用法理解
Oracle中start with和connect by 用法理解 转自:http://www.blogjava.net/xzclog/archive/2010/03/05/314642.html,多 ...
- Oracle中start with xx connect by prior 语句解析
Oracle中start with xx connect by prior 语句解析 Oracle这种的start with语句主要对B型树的数据进行递归查询.可以指定数据树上的任一节点,然后查找 ...
- 1.oracle中的exists 和not exists 用法:
1.oracle中的exists 和not exists 用法: exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表A ID NAME 1 A1 ...
- oracle中的exists 和 not exists 用法详解
from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...
- oracle中pivot的用法,oracle中pivot的实现原理和用法
考试大Oracle站整理: 1. 11g之前的行列转换面试 领袖又说了:"温故而知新".那就让咱们先看看11g之前是怎么实现地.行列转换一直看成甄别老手和新手的试金石,面试的时候面 ...
- oracle中的exists 和not exists 用法详解
有两个简单例子,以说明 "exists"和"in"的效率问题 1) select * from T1 where exists(select 1 from T2 ...
- oracle中SQL语句ge的用法,Oracle中SQL语句的几种用法
在诊断数据库系统性能的过程中,总会涉及到跟踪效率低下的SQL语句,Oracle数据库10g包含一种新的实用程序trcsess,它可以让您基于会话ID或模块名称之类的条件,有选择地从大量跟踪文件中抽取出 ...
- oracle中update,insert,delete的高级用法
一.对视图的更新. update,insert,delete除了可以作用于单表,还可以作用于视图.子查询,但是有种种限制. 视图(子查询)的限制: 1.没有集合操作符(并.差.交): 2.没有DI ...
- oracle+union+连接,Oracle中union/union all/Intersect/Minus用法
Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All,对两个结果集进行并集操作,包括重复行,不进行排序: Intersect,对两个结果集进行交集操作,不包 ...
最新文章
- 简单dp ---HDU3485 Count 101
- 【题解】P4124 [CQOI2016]手机号码
- 前端图片有时候能显示有时候不显示_如何自动搞定全站图片的alt属性?
- HTTP基础及基本配置
- Boost:获取随机数的实例
- Realsense的使用
- 实际开发的存储过程_实际生产中的 Android SDK开发总结| 完结
- 反向链接referrer的原理
- html怎么让背景颜色百分比,jquery – CSS设置背景颜色只是表行宽度的一个百分比...
- C语言学生信息管理系统源代码
- 深度学习之MNIST数据集
- 第三次打卡 特征工程
- 23 种设计模式的分类 - Design Patterns
- 什么是TPM设备管理系统?本文来告诉你
- 代理IP的直接转发与隧道转发
- 作品展第二周——痛并快乐着
- 微软Excel 2007 打勾方框/框里打勾
- Windows 8 简体中文 官方正式版 原版镜像下载
- 怎么分析出京东快递物流多次派件的单号
- 品优购项目html+css+js
热门文章
- 工信部确定5G使用频段 产业链即将迎来变革
- Flutter2 的 Sound null safety ?!以及发布pub上面的null safety标签实现
- 电脑无规律无响应,鼠标能动但是点击无反应一直在转圈。
- ubuntu16.04下运行Drcom客户端
- 领英封号怎么办,如何避免封号?
- WORKNC基础到进阶视频教程
- 一个简单的app爬虫:对近期热播剧《三十而已》进行知乎app关键词搜索
- 电脑上的日期从1980年到2099年
- Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(九十二)
- db mysql error_list