问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle 查询语句中prior什么意思

发布网友 发布时间:2022-04-22 13:17

我来回答

2个回答

懂视网 时间:2022-05-01 03:00

oracle树中prior的用法    
在oracle生成树时,prior起了至关重要的作用,它决定了书的遍历方向。下面用例子分别阐述之:   
1、prior放在子节点方向 (所谓子节点方向是指关联字段中作为子的字段,这里是EMPNO字段,对应父节点方向是指关联字段中作为父的字段,这里指MGR字段)
SELECT substr(sys_connect_by_path(ENAME,‘->‘),3) EMPLOYEE FROM EMP
CONNECT BY PRIOR EMPNO=MGR 4* START WITH ENAME=‘JONES‘ 


EMPLOYEE
------------------------------------------------------------

JONES
JONES->SCOTT
JONES->SCOTT->ADAMS JONES->FORD
JONES->FORD->SMITH
--从上面可以看出,如果prior放在子节点方向,则oracle会根据start with指定的节点作为根节点,从上往下遍
历基于指定节点的所有分支。它可能会对应多个分支。
--如果不指定start with,则oracle会把所有的节点都当成根节点分别往下遍历。 
--用以下方法查看以JONES为根节点的所有完整的分支
SELECT substr(sys_connect_by_path(ENAME,‘->‘),3) EMPLOYEE  FROM EMP
WHERE EMPNO NOT IN (SELECT MGR FROM EMP WHERE MGR IS NOT NULL)

CONNECT BY PRIOR EMPNO=MGR

START WITH ENAME=‘JONES‘  


EMPLOYEE
------------------------------------------------------------ 

JONES->SCOTT->ADAMS 

JONES->FORD->SMITH 


2、prior放在父节点方向 
SELECT substr(sys_connect_by_path(ENAME,‘->‘),3) EMPLOYEE FROM EMP

CONNECT BY PRIOR MGR=EMPNO

START WITH ENAME=‘JONES‘ 


EMPLOYEE
------------------------------------------------------------ 

JONES
JONES->KING
--从以上结果可以看出,当prior放在父节点端时,oracle会根据start with执行的节点作为子节点,从下往上找
其对应的父节点,然后再根据找到的父节点找父节点的父节点,依此类推,直到找到根节点为止。
--我们也不难知道,这种情况下只可能有一个分支。 
--用以下方法查看以JONES为最低层子节点的完整的分支
SELECT substr(sys_connect_by_path(ENAME,‘->‘),3) EMPLOYEE  FROM EMP
WHERE MGR IS NULL
CONNECT BY PRIOR MGR=EMPNO

START WITH ENAME=‘JONES‘ 


EMPLOYEE
------------------------------------------------------------ 

JONES->KING    
总结:
1)prior放在子节点端,则表示扫描树是以start with指定的节点作为根节点从上往下扫描。可能对应一个或多 个分支。
start with可以省略,如果省略,表示对所有节点都当成根节点分别进行遍历
2)prior放在父节点端,则表示扫描树是以start with指定的节点作为最低层子节点,从下往上扫描。顺序是子
节点往父节点扫描,直到根节点为止,这种情况只能得到一个分支。 start with可以省略,如果省略,表示对所有节点都当成最低层子节点分别往根节点方向遍历

oracle中prior关键字的作用

标签:

热心网友 时间:2022-05-01 00:08

connect by prior 是结构化查询中用到的,其基本语法是:
select ... from tablename start with 条件1
connect by prior 条件2
where 条件3;

例:
select * from table

start with org_id = 'AAA'
connect by prior org_id = parent_id;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。
用上述语法的查询可以取得这棵树的所有记录。
其中:
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id =
parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。

简单介绍如下:
早扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:
第一步:从根节点开始;
第二步:访问该节点;
第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;
第四步:若该节点为根节点,则访问完毕,否则执行第五步;
第五步:返回到该节点的父节点,并执行第三步骤。
总之:扫描整个树结构的过程也即是中序遍历树的过程。

1. 树结构的描述
树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述,如EMP表中的EMPNO和MGR。EMPNO表示该雇员的编
号,MGR表示领导该雇员的人的编号,即子节点的MGR值等于父节点的EMPNO值。在表的每一行中都有一个表示父节点的MGR(除根节点外),通过每个
节点的父节点,就可以确定整个树结构。
在SELECT命令中使用CONNECT BY 和蔼START WITH 子句可以查询表中的树型结构关系。其命令格式如下:
SELECT 。。。
CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 裂名2}
[START WITH];
其中:CONNECT
BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节
点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使
用列名外,还允许使用列表达式。START
WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。

START WITH: 不但可以指定一个根节点,还可以指定多个根节点。
2. 关于PRIOR
运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。
PRIOR被置于CONNECT
BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:
CONNECT BY PRIOR EMPNO=MGR
PIROR运算符被置于CONNECT BY
子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如:
CONNECT BY EMPNO=PRIOR MGR
在这种方式中也应指定一个开始的节点。
3. 定义查找起始节点
在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。
4.使用LEVEL
在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2,
依此类推。图1.2就表示了树结构的层次。
5.节点和分支的裁剪
在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点(自顶向下检索时)或前辈节点(自底向顶检索时)。
6.排序显示
象在其它查询中一样,在树结构查询中也可以使用ORDER BY 子句,改变查询结果的显示顺序,而不必按照遍历树结构的顺序。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在win10下安装docker? windows(win10)上的docker使用:安装(国内镜像)、操作 win10安装dockerWin10下Docker安装和使用 关于安装配置docker,找不到Hyper-V(win10 家庭版需要配置,专业版不需要... 怎么把微信上的聊天记录转到新手机 怎么把聊天记录转到另一个手机 快递被别人冒领,快递公司有没有责任 洋葱汤洋葱汤 一颗洋葱汤怎么做 一颗洋葱汤怎么做好吃 ORACLE中有哪些数据类型 oracle 递归 通过子节点查询根节点 oracle 递归 通过子节点查根节点 勒脚是指那些部分? 勒脚的作用是什么 什么叫做勒脚? 什么叫勒脚? 什么是外墙勒脚 在建筑方面,外墙勒脚是什么? 什么是建筑物外墙勒脚? 简述墙体勒脚防潮的构造要点 勒脚的处理方法有哪几种 勒脚(建筑)具体是什么东西 什么叫做勒脚,什么叫做踢脚???? 勒脚的作用是什么?常用的材料做法有哪几种? 结构设计:勒脚的作用及常用有哪些材料做法 勒脚的几种构造做法? 建筑物外墙勒脚用什么材料做 为何外国网友评价北京大兴机场,好像在科幻游戏中? 如何在oracle数据库中查询xml节点的值 oracle 统计查询子集下所有记录数 ORACLE中有哪些数据类型 oracle 函数里有像mysql数据库中的SUBSTRING_INDEX这个函数一样的功能函数吗 从oracle数据库查询数据生成xml,java解析xml文件的数据批量插入到oracle数据库(用SAX解析) oracle 递归查询没办法累计乘积吗 oracle sql优化涉及哪些原理 如何提高oracle的查询速度 Oracle循环问题,不用游标 B树和B加树的区别,再理解Oracle的B-Tree Index oracle索引是什么数据结构 oracle中,索引是干什么用的? 获取oracle 获取xmltpye节点中的属性值 属牛的孩子姓名带安字好吗 家里父母和孩子都属龙,那么关系好不好呢? 我姓朱老婆姓岳蛇年出生的男,安字辈的求取名 姓朱的男孩属牛起什么名字好 属牛起名的忌讳字太多了,可以用(顺)字吗 王字好听的名字女生双胞胎两个字? 房子贷款哪个银行利息低