- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
StartWith及ConnectBy
Oracle用Start with...Connect By子句递归查询(1)
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_TEST?start with id=1?connect by prior id = pid?从末梢往树ROOT递归select * from TBL_TEST?start with id=5?connect by prior pid = id
?
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 ...这种方式,但有时在需求需要的时候,可能会需要由下层向上层的逆向递归查询,此是语句就有所变化:例如要实现 select * from table where id in (0,01,0101,0203,0304) ;现在想把0304的上一级03给递归出来,0203的上一级02给递归出来,而01现在已经是存在的,最高层为0.而这张table不仅仅这些数据,但我现在只需要(0,01,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 BY PRIOR?PID =?ID START WITH ID IN (0,01,0101,0203,0304)?);
其中START WITH ID IN里面的值也可以替换SELECT 子查询语句.
?
注意由上层向下层递归与下层向上层递归的区别在于START WITH...CONNECT BY PRIOR...的先后顺序以及?ID =?PID 和?PID =?ID 的微小变化!
?
for example:
树结构查询语句(START WITH ...CONNECT BY P
您可能关注的文档
最近下载
- 配电箱采购合同协议书范本详细(2025年).docx VIP
- 部编版语文写字表六年级上册字帖.pdf VIP
- (高清版)B/T 24421.1-2023 服务业组织标准化工作指南 第1部分:总则.pdf VIP
- 2022年洛阳理工学院教师招聘笔试试题及答案解析.docx VIP
- 城市停车设施规划导则.docx VIP
- 天然气发电厂-燃气-蒸汽联合循环发电机组PPT课件.pptx VIP
- 《《中文核心期刊目录(2017年版)》》.doc VIP
- 基孔肯雅热防控技术指南(2025年版)测试题及参考答案.docx VIP
- 工程测量技术 电子水准仪 电子水准仪.ppt VIP
- 党支部贯彻落实八项规定扎实推进作风建设工作专题党课ppt课件.pptx VIP
文档评论(0)