START WITH...CONNECT BY PRIOR详解
START WITH...CONNECT BY PRIOR详解
START WITH...CONNECT BY PRIOR详解
ORACLE中的SELECT语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,CONNECT BY 是结构化查询中用到的,其基本语法是:
SELECT columnName1[,columnName2,…]
FROM tableName1,tableName2,..
[START WITH columnName3]
CONNECT BY {PRIOR col 1 = col 2 | col 1 = PRIOR col 2}
WHERE columnName4;
上述语法主要用查询表中的树型结构关系
columnName3是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
{PRIOR col 1 = col 2 | col 1 = PRIOR col 2}是连接条件
PRIOR表示强制从根节点到叶节点的顺序检索或从强制从叶节点到根节点的顺序检索
columnName4表示过滤条件,是对结果树进行过滤,注意是先有结果树再过滤,不是先过滤再得到结果树
例1:
SELECT * FROM EMP
START WITH EMPNO=7369
CONNECT BY PRIOR MGR = EMPNO;
上述查询语句,从根节点empno = 7369开始查询雇员编号和对应的领导编号的关系,PRIOR放在等号的前面表示从根节点到叶节点查询。如果不写明PRIOR表示默认从叶节点到根节点查询。
例2:
SELECT * FROM EMP
WHERE empno <> 7902
START WITH EMPNO=7369
CONNECT BY PRIOR MGR = EMPNO;
上述查询语句,从根节点empno = 7369开始查询雇员编号和对应的领导编号的关系,得到一棵树,WHERE子句是把这棵树中的EMPNO=7902的节点去掉。
知识扩展
1.树结构的描述
树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述,如emp 表中的empno 和mgr 。empno 表示该雇员的编号,mgr 表示该雇员对应的领导的编号,即子节点的empno 值等于父节点的mgr 值。在表的每一行中都有一个表示父节点的mgr (除根节点外),通过每个节点的父节点,就可以确定整个树结构。
在SELECT 语句中使用START WITH 和CONNECT BY子句可以查询表中的树型结构关系。其语法如下:
SELECT语句
[START WITH]
CONNECT BY {PRIOR 列名1 = 列名2| 列名1 = PRIOR 列名2};
其中:CONNECT BY 子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY 运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR 运算符所在的列表示该列是父节点,相应的另一列则表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
START WITH选项:不但可以指定一个根节点,还可以指定多个根节点。
例3:
SELECT * FROM EMP
START WITH EMPNO=7369 OR EMPNO = 7521
CONNECT BY PRIOR MGR = EMPNO;
上述查询语句,从根节点empno = 7369或empno = 7521开始查询雇员编号和对应的领导编号的关系,得到两个根节点
2.关于PRIOR
运算符PRIOR 被放置于等号前后的位置,决定着查询时的检索顺序。
PRIOR 被置于CONNECT BY 子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:
CONNECT BY PRIOR EMPNO=MGR
PIROR 运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如:
CONNECT BY EMPNO=PRIOR MGR
在这种方式中也应指定一个开始的节点。
3.定义查找起始节点
在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。
4.使用LEVEL
在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1 ,根节点的子节点为2 ,依此类推。
5.节点和分支的裁剪
在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用WHERE 子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点(自顶向下检索时)或前辈节点(自底向顶检索时),如上例2。
6.排序显示
如同在其它查询中一样,在树结构查询中也可以使用ORDER BY 子句,改变查询结果的显示顺序,而不必按照遍历树结构的顺序。
例4
SELECT * FROM EMP
START WITH EMPNO=7902
CONNECT BY PRIOR MGR = EMPNO
ORDER BY empno ASC;
转载 http://hi.baidu.com/no20win/item/9d49653f219dc13b2e0f8186
START WITH...CONNECT BY PRIOR详解的更多相关文章
- Oracle层级询语句connect by 用法详解
如果表中包含层级数据,那么你就可以使用层级查询从句选择行层级顺序. 1.层级查询从句语法 层级查询从句语法: { CONNECT BY [ NOCYCLE ] condition [AND condi ...
- 在Oracle 中使用CONNECT BY PRIOR START WITH 语句详解
语法:connect by 是结构化查询中用到的,其基本语法如下: start with,connect by主要目的:从表中取出树状数据.可以假想成表中存成的各条数据是分别是树中的一个结点. sel ...
- React 实践心得:react-redux 之 connect 方法详解
Redux 是「React 全家桶」中极为重要的一员,它试图为 React 应用提供「可预测化的状态管理」机制. Redux 本身足够简单,除了 React,它还能够支持其他界面框架.所以如果要将 R ...
- nRF Connect SDK(NCS)/Zephyr固件升级详解 – 重点讲述MCUboot和蓝牙空中升级
如何在nRF Connect SDK(NCS)中实现蓝牙空中升级?MCUboot和B0两个Bootloader有什么区别?MCUboot升级使用的image格式是怎么样的?什么是SMP协议?CBOR编 ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- Oracle函数sys_connect_by_path 详解
Oracle函数sys_connect_by_path 详解 语法:Oracle函数:sys_connect_by_path 主要用于树查询(层次查询) 以及 多列转行.其语法一般为: s ...
- ORACLE PL/SQL编程详解(转)
原帖地址:http://blog.csdn.net/chenjinping123/article/details/8737604 ORACLE PL/SQL编程详解 SQL语言只是访问.操作数据库的语 ...
- # Okhttp解析—Interceptor详解
Okhttp解析-Interceptor详解 Interceptor可以说是okhttp的精髓之一,Okhttp重写请求/响应.重试.缓存响应等操作,基本都是在各个Interceptor中完成的,上篇 ...
- Docker命令详解
Docker命令详解 最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...
随机推荐
- d3.js(v5.7)力导向图(关系图谱)
先上图,后面再一一解释: ok,为了方便理解,这里我就没有用之前封装的automatch函数来将数据和节点匹配了,如果你对enter(),exit()函数还不是很理解的话,请移步至我之前写的<n ...
- [Scala]Scala学习笔记五 Object
1. 单例对象 Scala没有静态方法或静态字段,可以使用object来达到这个目的,对象定义了某个类的单个实例: object Account{ private var lastNumber = 0 ...
- clean-css 安装 使用
https://github.com/jakubpawlowicz/clean-css-cli https://davidwalsh.name/clean-css
- 如何制作dll库的API文档,自动生成微软风格的chm文件 Sandcastle Help File Builder 使用方法
当你开发了一个库的时候,就需要给库开发一个api文档,微软提供了一个C#库的自动生成工具.我在使用的过程中记录了相关的信息,以供大家学习和查阅,如有不正之处,欢迎指出. 首先先下载一个软件,下载地址在 ...
- python使用wget下载网络文件
wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. ubuntu 安装wget pip install wget 从网络或本地硬盘下载文件(并 ...
- 安卓开发 报错 错误:This version of android studio is incompatible with the gradle version used. 的解决
本文的解决方法主要参考以下文章: https://blog.csdn.net/sinat_15417921/article/details/51907728 Android 开发总是会遇到各种不知道怎 ...
- Mini Stirling engine
So I spent 5 or 6 hours last night trying to hook up a mini Stirling engine with the gearbox of a Ta ...
- RankNet
RankNet 论文的笔记:Learning to rank using gradient descent. 模型 特征 \(\mathbf x_i \in \mathbb R^d\) 模型函数:\( ...
- 判断IOS安装后是否是第一次启动
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]){ [[NSUserDefaults s ...
- 网站部署,网站要求需要支持mb_substring
如果没有这个函数,php可能会出现中文乱码,处理方法如下: # yum install php-mbstring //安装 之后在/etc/php.ini中添加extension=mbstring ...