oracle中 connect by prior

oracle中 connect by prior

Oracle 中 Connect By Prior 递归算法

Oracle 中 START WITH ... CONNECT BY PRIOR 子句用法

CONNECT BY 是结构化查询中用到的,其基本语法是:

SELECT ...
FROM tablename
START WITH 条件1
CONNECT BY 条件2
WHERE 条件3;

例:

SELECT * 
FROM table  
START WITH org_id = 'HBHqfWGWPy'  
CONNECT BY PRIOR org_id = parent_id;

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

其中:

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

简单介绍如下:

在扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:

  1. 从根节点开始;
  2. 访问该节点;
  3. 判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;
  4. 若该节点为根节点,则访问完毕,否则执行第五步;
  5. 返回到该节点的父节点,并执行第三步骤。

总之:扫描整个树结构的过程也即是中序遍历树的过程。

树结构的描述

树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述。如 EMP 表中的 EMPNOMGREMPNO 表示该雇员的编号,MGR 表示领导该雇员的人的编号,即子节点的 MGR 是父节点的 EMPNO

在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2,依此类推。

节点和分支的裁剪

在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用 WHERE 子句来限定树型结构中的单个节点。但这却不影响其后代节点(自顶向下检索时)或前辈节点(自底向上检索时)。

排序显示

象在其它查询中一样,在树结构查询中也可以使用 ORDER BY 子句,改变查询结果的显示顺序,而不必按照遍历树结构的顺序。

Read more

超棒的雅思资源!

超棒的雅思资源!

雅思真题材料地址: https://github.com/zeeklog/IETLS 感谢所有人。材料来自:@shah0150 & @kbtxwer * 超棒的雅思资源 * 雅思简介 * 听力 * 阅读 * 写作 * 口语 * 词汇 * 其他 * YouTube 频道 * [播客] (#podcasts) 雅思简介 * 什么是雅思 - 了解什么是雅思 听力 * 高级听力 * 雅思官方网站 * 考试英语 * 英国广播公司节目 * 乔治梅森大学口音学习网站 - 学习不同的口音 * 英国广播公司播客 * 英国文化协会听力练习 阅读 * 雅思提升阅读 写作 * 雅思提升写作 * 雅思从 6 分到 9 分 * 迷你雅思 口语 * Verbling 提供在线英语家教服务

By Ne0inhk
🚀Zeek.ai一款基于 Electron 和 Vite 打造的跨平台(支持 Windows、macOS 和 Linux) AI 浏览器

🚀Zeek.ai一款基于 Electron 和 Vite 打造的跨平台(支持 Windows、macOS 和 Linux) AI 浏览器

是一款基于 Electron 和 Vite 打造的跨平台(支持 Windows、macOS 和 Linux) AI 浏览器。 集成了 SearXNG AI 搜索、开发工具集合、 市面上最流行的 AI 工具门户,以及代码编写和桌面快捷工具等功能, 通过模块化的 Monorepo 架构,提供轻量级、可扩展且高效的桌面体验, 助力 AI 驱动的日常工作流程。

By Ne0inhk