数据库递归查询.doc

数据库递归查询.doc

ID:59355539

大小:59.50 KB

页数:7页

时间:2020-09-04

数据库递归查询.doc_第1页
数据库递归查询.doc_第2页
数据库递归查询.doc_第3页
数据库递归查询.doc_第4页
数据库递归查询.doc_第5页
资源描述:

《数据库递归查询.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Oracle的递归查询收集的几条在oracle中通过connectbyprior来实现递归查询Startwith...ConnectBy子句递归查询一般用于一个表维护树形结构的应用。创建示例表:CREATETABLETBL_TEST(IDNUMBER,NAMEVARCHAR2(100BYTE),PIDNUMBERDEFAULT0);插入测试数据:INSERTINTOTBL_TEST(ID,NAME,PID)VALUES('1','10','0');INSERTINTOTBL_TEST(ID,NAME,PID)VALUES('2','11','1');INSERTINTOTBL_TES

2、T(ID,NAME,PID)VALUES('3','20','0');INSERTINTOTBL_TEST(ID,NAME,PID)VALUES('4','12','1');INSERTINTOTBL_TEST(ID,NAME,PID)VALUES('5','121','2');从Root往树末梢递归select*fromTBL_TESTstartwithid=1connectbypriorid=pid从末梢往树ROOT递归select*fromTBL_TESTstartwithid=5connectbypriorpid=id=============================

3、==================================================================================有一张表t字段:parentchild两个字段的关系是父子关系写一个sql语句,查询出指定父下面的所有的子比如abacaebb1bb2cc1ee1ee3dd1指定parent=a,选出abacaebb1bb2cc1ee1ee3SQL语句:selectparent,childfromteststartwithparent='a'connectbypriorchild=parent=======================

4、=========================================================================connectby是结构化查询中用到的,其基本语法是:select...fromtablenamestartbycond1connectbycond2wherecond3;简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。用上述语法的查询可以取得这棵树的所有记录。其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实

5、际就是多棵树。COND2是连接条件,其中用PRIOR表示上一条记录,比如CONNECTBYPRIORID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。COND3是过滤条件,用于对返回的所有记录进行过滤。PRIOR和STARTWITH关键字是可选项PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。STARTWITH子句为可选项,用来标识哪个节点作为查

6、找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。完整的例子如SELECTPID,ID,NAMEFROMT_WF_ENG_WFKINDSTARTWITHPID=0CONNECTBYPRIORID=PID以上主要是针对上层对下层的顺向递归查询而使用startwith...connectbyprior...这种方式,但有时在需求需要的时候,可能会需要由下层向上层的逆向递归查询,此是语句就有所变化:例如要实现select*fromtablewhereidin('0','01','0101','0203','0304');现在想把0304的上一级03给递归出来,020

7、3的上一级02给递归出来,而01现在已经是存在的,最高层为0.而这张table不仅仅这些数据,但我现在只需要('0','01','0101','0203','0304','02','03')这些数据,此时语句可以这样写SELECTPID,ID,NAMEFROMV_WF_WFKIND_TREEWHEREIDIN(SELECTDISTINCT(ID)IDFROMV_WF_WFKIND_TREECONNECTBYPRIORPID=IDSTARTWITHIDIN(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。