ORACLE 树遍历2025年2月26日 | 4 分钟阅读 在本文中,我们将详细了解 Oracle 树遍历的概念。 引言 Oracle 提供了一个非常有用的功能,称为树遍历,它允许您递归地连接一个表以检索层次结构中的所有记录。 这种分层树是
要实现 Oracle 树,我们需要使用 CONNECT BY 子句。 这提供了一种报告这些树中所有家庭成员的方法。 它允许您排除家谱的分支或单个成员,并允许您上下遍历树,在遍历过程中遇到家庭成员。 考虑一个 emp_details 表的示例 现在插入数据。 要检索数据,请使用以下查询。 输出
考虑一个例子 输出 说明 执行上述查询会得到如上所示的结果。 要创建如上所示的系列,请按照以下步骤操作 1. Oracle 使用 SELECT 语句的 START WITH 分层子句选择层次结构的根行。 这向 Oracle 指示层次结构应从哪一行开始,并声明如下 这里的条件是 (ID = 10) START WITH 子句也可以有一个子查询。 如果在子查询中使用 WHERE 子句,则语句从满足 WHERE 条件的所有行开始。 但这不是首选,因为它没有指示真正的层次结构。 应该始终使用 START WITH 子句,但如果省略它,则树语句将从表的所有行作为根行开始。 2. 每个子行都需要满足 CONNECT BY 子句相对于根行之一的条件。 此子句解释了行之间的父/子关系,有助于确定查询的方向,无论是子到父还是父到子。 您可以使用关键字 PRIOR 将当前行与备用行区分开来,其中 PRIOR 指的是父行。 Oracle 服务器评估父行的 PRIOR 表达式和表中每一行的其他语句,以找到父行的子行。 条件为真的行是父行的子行。 有时这有助于获取不同的行,而无需在 FROM 子句中指定表。 在上面的查询中,CONNECT BY MGR = PRIOR ID 告诉 Oracle 查找下一行,其中 EMPNO 列中的值等于 PRIOR 行中 MGR 列中的值。 3. LEVEL 伪列在 Oracle 中运行的每个查询中都可用,并允许您显示行在层次结构中的等级。 它是一个数值,指示您在树中的哪个“级别”。 在此级别中,1 作为根行返回,级别 2 作为根的子行返回。 4. LPAD 函数用于使用 LEVEL 伪列将结果显示为缩进的树。 它的语法是 这将返回“char1”,因为它在左侧填充了 char2 中的字符序列,直到长度“n”。 由于我们从 ID = 10 开始,因此 ID = 10 的员工将充当根节点(级别 = 1)。 由于根位于级别 1,因此沿根节点的空空格数为 0(即 2 * (1-1))。 类似地,如果我们向下移动树,级别会一直增加 1,即 2、3、4 等,并且还有空空格。 如果要从子节点移动到父节点,请使用以下查询。 您也可以在 SELECT 语句中使用 WHERE 子句,该子句单独评估每一行的条件,而不是删除不满足条件的所有行的子行。 由于不可能使用基本 SQL 创建员工的分层列表,因为您需要一次查看表的多行,因此 CONNECT BY 子句为分层信息提供了一个很棒的功能,因此它是一个真正的省时工具。 您可以尝试另一个查询。 |
我们请求您订阅我们的新闻通讯以获取最新更新。