Oracle “CONNECT BY” 使用

Oracle “CONNECT BY”是层次查询子句,一般用于树状或者层次结果集的查询。其语法是:

[ START WITH condition ]

CONNECT BY [ NOCYCLE ] condition

说明:
1. START WITH:告诉系统以哪个节点作为根结点开始查找并构造结果集,该节点即为返回记录中的最高节点。

2. 当分层查询中存在上下层互为父子节点的情况时,会返回ORA-01436错误。此时,需要在connect by后面加上NOCYCLE关键字。同时,可用connect_by_iscycle伪列定位出存在互为父子循环的具体节点。 connect_by_iscycle必须要跟关键字NOCYCLE结合起来使用

[例1]

创建一个部门表,这个表有三个字段,分别对应部门ID,部门名称,以及上级部门ID

   DEPID DEPNAME                                                                           UPPERDEPID

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

          0 General Deparment                                                                

          1 Development                                                                                0

          2 QA                                                                                         0

          3 Server Development                                                                         1

          4 Client Development                                                                         1

          5 TA                                                                                         2

          6 Porject QA                                                                                 2

现在我要根据“CONNECT BY”来实现树状查询结果

SQL> SELECT RPAD( ‘ ‘, 2*(LEVEL-1), ‘-‘ ) || DEPNAME "DEPNAME",

CONNECT_BY_ROOT DEPNAME "ROOT",

CONNECT_BY_ISLEAF "ISLEAF",

LEVEL ,

SYS_CONNECT_BY_PATH(DEPNAME, ‘/‘) "PATH"

FROM DEP

START WITH UPPERDEPID IS NULL

CONNECT BY PRIOR DEPID = UPPERDEPID;
 
 
DEPNAME                        ROOT                    ISLEAF      LEVEL PATH

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

General Deparment              General Deparment            0          1 /General Deparment

 -Development                  General Deparment            0          2 /General Deparment/Development

 ---Server Development         General Deparment            1          3 /General Deparment/Development/Server Development

 ---Client Development         General Deparment            1          3 /General Deparment/Development/Client Development

 -QA                           General Deparment            0          2 /General Deparment/QA

 ---TA                         General Deparment            1          3 /General Deparment/QA/TA

 ---Porject QA                 General Deparment            1          3 /General Deparment/QA/Porject QA
 

说明:
1. CONNECT_BY_ROOT 返回当前节点的最顶端节点

2. CONNECT_BY_ISLEAF 判断是否为叶子节点,如果这个节点下面有子节点,则不为叶子节点

3. LEVEL 伪列表示节点深度

4. SYS_CONNECT_BY_PATH函数显示详细路径,并用“/”分隔

总结:

1.根据树形结构查子类

select * from zhfg_soar.SP_ORG_GROUP where levelpermission = 0 and validflag = 1
start with  id = ‘20130718091552GRP60000001‘
connect by prior id=PARENTID 
 
 

2. 根据属性结构查询父类

select * from zhfg_soar.SP_ORG_GROUP where levelpermission = 0 and validflag = 1
start with  id = ‘40288181455dbe1701455ee92b9d001d‘
connect by prior PARENTID=id 
 

部分转载:http://www.cnblogs.com/lettoo/archive/2010/08/03/1791239.html

时间: 2024-08-25 14:55:15

Oracle “CONNECT BY” 使用的相关文章

Oracle connect resource权限

connect resource权限:grant connect,resource to user;后用户包括的权限:CONNECT角色: --是授予最终用户的典型权利,最基本的ALTER SESSION --修改会话CREATE CLUSTER --建立聚簇CREATE DATABASE LINK --建立数据库链接CREATE SEQUENCE --建立序列CREATE SESSION --建立会话CREATE SYNONYM --建立同义词CREATE VIEW --建立视图RESOURC

Oracle “CONNECT BY” (层级递归查询)

Oracle "CONNECT BY"是层次查询子句,一般用于树状或者层次结果集的查询.其语法是: ? 1 2 [ START WITH condition ] CONNECT BY [ NOCYCLE ] condition The start with .. connect by clause can be used to select data that has a hierarchical relationship (usually some sort of parent-&g

Oracle connect by 树查询之三(超详细)

查找员工编号为7369的领导: 1 SELECT LEVEL,E.* FROM EMP E CONNECT BY PRIOR E.MGR = E.EMPNO START WITH E.EMPNO = 78762 ORDER BY LEVEL DESC "start with" -- this identifies all LEVEL=1 nodes in the tree "connect by" -- describes how to walk from the

Oracle CONNECT by 简单用法

Oracle查询层级的  一个表里 通过一个parentid连接 select * FROM A_MERIATILA start with id=520 CONNECT by prior id=PARENTID order by id;

oracle connect by用法篇 (转)

1.基本语法 select * from table [start with condition1] connect by [prior] id=parentid 1 2 1 2 一般用来查找存在父子关系的数据,也就是树形结构的数据:其返还的数据也能够明确的区分出每一层的数据. start with condition1 是用来限制第一层的数据,或者叫根节点数据:以这部分数据为基础来查找第二层数据,然后以第二层数据查找第三层数据以此类推. connect by [prior] id=parent

Oracle connect by

level1 level2 level3 … 记录1 记录1 记录1 … 记录2 … 记录3 … 记录2 记录1 … 记录2 … 记录3 … 记录3 记录1 … 记录2 … 记录3 … 记录2 记录1 记录1 … 记录2 … 记录3 … 记录2 记录1 … 记录2 … 记录3 … 记录3 记录1 … 记录2 … 记录3 … 记录3 记录1 记录1 … 记录2 … 记录3 … 记录2 记录1 … 记录2 … 记录3 … 记录3 记录1 … 记录2 … 记录3 … … … … … select *

oracle connect by 用法

Oracle中可以通过START WITH . . . CONNECT BY . . .子句来实现SQL的层次查询,即递归查询 例如: select level||'月' 月份 from dual connect by level < 13; 或者 select rownum||'月' 月份 from dual connect by rownum < 13; 可以递归查询出12个月 1    1月 2    2月 3    3月 4    4月 5    5月 6    6月 7    7月

oracle connect by用法篇

1.基本语法 select * from table [start with condition1] connect by [prior] id=parentid 一般用来查找存在父子关系的数据,也就是树形结构的数据:其返还的数据也能够明确的区分出每一层的数据. start with condition1 是用来限制第一层的数据,或者叫根节点数据:以这部分数据为基础来查找第二层数据,然后以第二层数据查找第三层数据以此类推. connect by [prior] id=parentid 这部分是用

【转】oracle CONNECT BY PRIOR叶子节点查找根节点

SELECT TRANS_ID FROM TRANS_INST WHERE connect_by_isleaf=1 START WITH TRANS_ID =480242 CONNECT BY PRIOR UP_TRANS_ID = TRANS_ID; 说明: 表TRANS_INST(TRANS_ID,UP_TRANS_ID) 480242表示树的任何一个节点 TRANS_ID子节点 UP_TRANS_ID父节点