`

用select 语句中的START WITH...CONNECT BY PRIOR子句实现递归查询

阅读更多

Finally, the next example adds a START WITH clause to specify a root row for the hierarchy, and an ORDER BY clause using the SIBLINGS keyword to preserve ordering within the hierarchy:

SELECT last_name, employee_id, manager_id, LEVEL
      FROM employees
      START WITH employee_id = 100
      CONNECT BY PRIOR employee_id = manager_id
      ORDER SIBLINGS BY last_name;


LAST_NAME                         EMPLOYEE_ID MANAGER_ID  LEVEL
-------------------------         ----------- ---------- ----------
King                              100                     1
Cambrault                         148        100          2
Bates                             172        148          3
Bloom                             169        148          3
Fox                               170        148          3
Kumar                             173        148          3
Ozer                              168        148          3
Smith                             171        148          3
De Haan                           102        100          2
Hunold                            103        102          3
Austin                            105        103          4
Ernst                             104        103          4
Lorentz                           107        103          4
Pataballa                         106        103          4
Errazuriz                         147        100          2
Ande                              166        147          3
Banda                             167        147          3

 

 

 语法:

在oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 
是结构化查询中用到的,其基本语法是: 
select ... from tablename 
start with cond1 
connect by cond2 
where cond3; 

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段: 
id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。 
用上述语法的查询可以取得这棵树的所有记录。 

其中:
COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。 
COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说
上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。 
COND3是过滤条件,用于对返回的所有记录进行过滤。 

Oracle 的树形查找语句connect by prior ... start with... 
Start with 后面跟的是开始结点即从什么位置开始查找。可以有多个起始结点 
Connect by  连接有父子关系的两个节点 id = parent_id 

怎么去遍历这棵树prior是关键,
如果prior 在parent_id 这一侧(id=prior parent_id)则说明向父节点查找即自底向上查找,
如果prior在id 这一侧(prior id= parent_id)则说明向子结点方向查找即自顶向下查找。 
遍历方式:先序遍历











分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics