oracle递归查询

简介: Select * from …. Where [结果过滤条件语句] Start with  [and起始条件过滤语句] Connect by prior [and中间记录过滤条件语句] 一、Start with.........Connect By 子句         START WITH specifies the root row(s) of the hierarchy

Select * from …. Where [结果过滤条件语句]

Start with  [and起始条件过滤语句]

Connect by prior [and中间记录过滤条件语句]

一、Start with.........Connect By 子句

        START WITH specifies the root row(s) of the hierarchy.

         CONNECT BY specifies the relationship between parent rows and child rows of the hierarchy. In a hierarchical query, one expression in condition must be qualified with the PRIOR operator to refer to the parent row

二、示例

1.          创建测试表

CREATE   TABLE  DG_Test
(
D_ID    
NUMBER , D_NAME  VARCHAR2 ( 100  BYTE), D_PID    NUMBER  , D_Enabled  NUMBER  )

2.          插入测试数据

INSERT  NTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED)  VALUES ( 1 , ' 10 ' , 0 , 1 );
INSERT   INTO  dg_test(D_ID,D_NAME,D_PID,D_ENABLED)  VALUES ( 2 , ' 11 ' , 1 , 1 );
INSERT   INTO  dg_test(D_ID,D_NAME,D_PID,D_ENABLED)  VALUES ( 3 , ' 20 ' , 0 , 1 );
INSERT   INTO  dg_test(D_ID,D_NAME,D_PID,D_ENABLED)  VALUES ( 4 , ' 12 ' , 1 , 1 );
INSERT   INTO  dg_test(D_ID,D_NAME,D_PID,D_ENABLED)  VALUES ( 5 , ' 121 ' , 2 , 1 );
INSERT   INTO  dg_test(D_ID,D_NAME,D_PID,D_ENABLED)  VALUES ( 6 , ' 1215 ' , 5 , 0 );
INSERT   INTO  dg_test(D_ID,D_NAME,D_PID,D_ENABLED)  VALUES ( 7 , ' 1214 ' , 4 , 0 );

3.      select * from DG_Test

4.      上述单表情况一般用于维护树型结构的应用

Root往树末梢递归

select * from dg_test
start with D_id=
1
connect by prior D_id = D_pid

从末梢往树ROOT递归

select * from dg_test
start with D_id=
7
connect by D_id = prior D_pid

start with 后面跟着树根,定义了树开始显示的起点位置,如上面两种查询,不管从树根到树顶,还是从树顶到树根。

5.      排除单一体及其分支

select t.* from dg_test t
start with D_id=
1
connect by prior D_id = D_pid
and d_id !=
2

这个语句表示从D_id2的开始,包括后面的子分支,全部排除

注意:这里和where条件的过虑方式不一样,where条件只是把相应的某条不符合要求的记录排除。

相关文章
|
23天前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
27天前
|
Oracle 关系型数据库 数据库
【YashanDB知识库】oracle dblink varchar类型查询报错记录
在使用Oracle DBLink查询VARCHAR类型数据时,可能会遇到多种报错。通过了解常见错误原因,采取合适的解决方法,可以有效避免和处理这些错误。希望本文提供的分析和示例能帮助你在实际工作中更好地处理DBLink查询问题。
55 10
|
7月前
|
SQL 监控 Oracle
|
7月前
|
Oracle 关系型数据库 数据处理
|
7月前
|
SQL 监控 Oracle
|
7月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle并行查询
【7月更文挑战第12天】
159 15
|
9月前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在 DataWorks 中,使用Oracle作为数据源进行数据映射和查询,如何更改数据源为MaxCompute或其他类型
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
91 1
|
9月前
|
SQL Oracle 关系型数据库
Oracle系列之八:SQL查询
Oracle系列之八:SQL查询
|
9月前
|
Oracle 关系型数据库
Oracle 递归查询
Oracle 递归查询
46 0
|
9月前
|
SQL Oracle 关系型数据库
Oracle查询优化-查询只包含数字或字母的数据
【2月更文挑战第4天】【2月更文挑战第10篇】查询只包含数字或字母的数据
977 1

推荐镜像

更多