2022年数据库递归查询参考 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年数据库递归查询参考 .pdf》由会员分享,可在线阅读,更多相关《2022年数据库递归查询参考 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Oracle的递归查询收集的几条在oracle 中通过 connect by prior 来实现递归查询Start with.Connect By子句递归查询一般用于一个表维护树形结构的应用。创建示例表:CREATE TABLE TBL_TEST(ID NUMBER,NAME VARCH AR2(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_
2、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_TEST start with id=1 connect by prior id=pid从末梢往树ROOT 递归select*from TBL_TEST start with id=5 connect by prior pid=id=有一张表t 字段:parent child 两个字
3、段的关系是父子关系写一个 sql 语句,查询出指定父下面的所有的子比如a b a c a e b b1 b b2 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -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
4、 start by cond1 connect by cond2 where cond3;简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:id,parentid那么通过表示每一条记录的parent 是谁,就可以形成一个树状结构。用上述语法的查询可以取得这棵树的所有记录。其中 COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。COND2 是连接条件,其中用PRIOR 表示上一条记录,比如CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID 是本条记录的PRAENTID,即本记录的父亲是上一条记录。COND3 是过滤条
5、件,用于对返回的所有记录进行过滤。PRIOR 和 START W ITH 关键字是可选项PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR 运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。完整的例子如SELECT PID,ID,NAME FROM T_WF_ENG_WFKIND START WITH PID=0 CONNECT
6、BY PRIOR ID=PID以上主要是针对上层对下层的顺向递归查询而使用start with.connect by prior.这种方式,但有时在需求需要的时候,可能会需要由下层向上层的逆向递归查询,此是语句就有所变化:例如要实现select*from table where id in(0,01,0101,0203,0304);现在想把 0304 的上一级 03 给递归出名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -来,0203 的上一级 02 给递归出来,而01现在已经是存在的,最高层为 0.而这张 table不仅仅这些数据,但我 现 在 只 需 要(0,01,
7、0101,0203,0304,02,03)这 些 数 据,此 时 语 句 可 以 这 样 写SELECT PID,ID,NAME FROM V_WF_WFKIND_TREE WHERE ID IN(SELECT DISTINCT(ID)ID FROM V_WF_WFKIND_TREE CONNECT BYPRIOR PID=ID START WITH ID IN(0,01,0101,0203,0304);其中 START W ITH ID IN里面的值也可以替换SELECT 子查询语句.注意由上层向下层递归与下层向上层递归的区别在于START W ITH.CONNECT BY PRIOR.的先
8、后顺序以及ID=PID 和 PID=ID 的微小变化!=connect by prior start with 经常会被用到一个表中存在递归关系的时候。比如我们经常会将一个比较复杂的目录树存储到一个表中。或者将一些部门存储到一个表中,而这些部门互相有隶属关系。这个时候你就会用到connect by prior start with。典型的使用方法就是:select*from table connect by prior cur_id=parent_id start with cur_id=?例如:a b1 0 2 1 3 1 4 2 5 3如果想查找 a=2 及其下面的所有数据,则:selec
9、t*from table connect by prior a=b start with a=2 a b 2 1 4 2这些只是基础,皮毛。其实只要你灵活的构造查询语句。可以得出意想不到的结果。比如生成树每一个路径。但是这些记录组成的树必须正常才可以。如果有互为父子的情况,就会出现循环错误!select*from tb_cus_area_cde-子取父select*from tb_cus_area_cde a CONNECT BY PRIOR a.c_snr_area=a.c_area_cde START WITH a.c_area_cde=1040101-父取子select*from tb_
10、cus_area_cde a CONNECT BY PRIOR a.c_area_cde=a.c_snr_area START WITH a.c_snr_area is null注意:在用这个函数的时候,statement 的参数要用ResultSet.TYPE_SCROLL_INSENSITIVE 而不能用ResultSet.TYPE_SCROLL_SENSITIVE,在这里再把这两个之间的区别讲讲:1.TYPE_FORWORD_ONLY,只可向前滚动;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -2.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据库递归查询参考 2022 数据库 递归 查询 参考
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内