数据库递归查询.doc
文本预览下载声明
Oracle的递归查询
收集的几条在oracle中通过connect by prior来实现递归查询
Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。创建示例表:CREATE TABLE TBL_TEST(ID NUMBER,NAME VARCHAR2(100 BYTE),PID NUMBER DEFAULT 0);
插入测试数据:INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(1,10,0);INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(2,11,1);INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(3,20,0);INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(4,12,1);INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(5,121,2);
从Root往树末梢递归select * from TBL_TESTstart with id=1connect by prior id = pid
从末梢往树ROOT递归select * from TBL_TESTstart with id=5connect by prior pid = id
===============================================================================================================
有一张表 t 字段: parent child 两个字段的关系是父子关系 写一个sql语句,查询出指定父下面的所有的子 比如 a b a c a e b b1 b b2 c c1 e e1 e e3 d d1 指定parent=a,选出 a b a c a e b b1 b b2 c c1 e e1 e e3 SQL语句: select parent,child from test start with parent=a connect by prior child=parent
================================================================================================
connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start by cond1 connect by cond2 where cond3; 简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段: id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。 用上述语法的查询可以取得这棵树的所有记录。 其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。 COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。 COND3是过滤条件,用于对返回的所有记录进行过滤。
PRIOR和START WITH关键字是可选项PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。完整的例子如SELECT PID,ID,NAME FROM T_WF_ENG_WFKIND START WITH PID =0 CONNECT BY PRIOR ID = PID
以上主要是针对上层对下层的顺向递归查询而使用start with ... connect by prior
显示全部