oracle 的 start with … connect by …

oracle 的 start with … connect by …

语法:

   select * from some_table

                  [where 条件1]

                  connect by [条件2]

                  start with [条件3];   

其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果,[where 条件1]可以不需要。

 [where 条件1]、[条件2]、[条件3]各自作用的范围都不相同:     

 [where 条件1]

是在根据“connect by [条件2] start with [条件3]”选择出来的记录中进行过滤,是针对单条记录的过滤, 不会考虑树的结构(最后的过滤);

 [ connect by 条件2]

指定构造树的条件,以及对树分支的过滤条件,在这里执行的过滤会把符合条件的记录及其下的所有子节点都过滤掉;   

 [ start with 条件3]

限定作为搜索起始点的条件,如果是自上而下的搜索则是限定作为根节点的条件,如果是自下而上的搜索则是限定作为叶子节点的条件; 

要根据connect by 从上到下还是从下到上,来确定起始节点,可能是叶节点,也可能是父节点,这些开始节点可以是多个,并且包含这些节点。

 ==========================================================================

例子:

表结构:

-- Create table

create table A

(

  id NUMBER,

  name VARCHAR2(20),

  pid NUMBER

)

 

oracle 的 start with ... connect by ...

select * from A start with id=2 connect by prior id=pid;–从父到子(从上到下)
 
 
oracle 的 start with ... connect by ...
 
select * from A start with id=2 connect by prior pid= id; –从子到父  (从下到上)
 
oracle 的 start with ... connect by ...
 
select * from A start with id=2 connect by pid= id;   –不会进行循环
oracle 的 start with ... connect by ...


 

对prior的理解

1.prior可以不要,不要的时候只能查找到符合“start with [条件3]”的记录,不会在寻找这些记录的子节点或父节点。

2.

 connect by prior id=pid  采用自上而下的搜索方式(先找父节点然后找子节点)

 connect by id=prior pid采用自下而上的搜索方式(先找叶子节点然后找父节点)

 

从子节点到父节点,则prior指的是子节点,构造出从子节点到父节点的关系,即子节点的pid=父节点的id (prior pid=id) ;从父节点到子节点,则prior指的是父节点,构造出从父节点到子节点的关系,即父节点的id=子节点的pid(proid id =pid)。

3.prior id=pid 和 pid=prior id  效果是一样的。

转载于:https://www.cnblogs.com/lion88/p/4186980.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109615.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • VDbench 参数信息[通俗易懂]

    VDbench 参数信息[通俗易懂]HD:主机定义 如果您希望展示当前主机,则设置hd=localhost。如果希望指定一个远程主机,hd=label。 system=IP地址或网络名称。 clients=用于模拟服务器的正在运行的客户端数量。 SD:存储定义 sd=标识存储的名称。 host=存储所在的主机的ID。 lun=原始磁盘、磁带或文件系统的名称。vdbench也可为您创建一个磁盘。 threads=对SD的最大并发I/O请求数量。默认

  • Python Faker的使用,你了解多少呢?

    Python Faker的使用,你了解多少呢?

  • C# UDP编程「建议收藏」

    C# UDP编程「建议收藏」引用:前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当的另一个传输层协议,它也是当下流行的很多主流网络应用(例如QQ、MSN和Skype等一些即时通信软件传输层都是应用UDP协议的)底层的传输基础,所以在本专题中就简单介绍下UDP的工作原理和UDP编程的只是,希望可以对刚接触网络编程的朋友起到入门的作用。一、UDP介绍UDP和TCP都是构建在IP层之上传输层

  • idea20212破解激活 重启未生效(已测有效)

    idea20212破解激活 重启未生效(已测有效),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • jvm基础_java实现栈四个方法

    jvm基础_java实现栈四个方法JVM进阶(一)——初识JAVA栈  若想使自己编写的Java程序高效运行,以及进行正确、高效的异常诊断,JVM是不得不谈的一个话题。本”JVM进阶“专栏大部分内容均来源于经典书籍《深入理解Java虚拟机》。  下面言归正传,本文重点从虚拟机内存模型(运行时数据区域)入手。先看图:  这是一张比较官方的虚拟机模型图,今天讲的就是虚线框中栈的部分。  栈是我们最常用的内存区域。它主

  • idea 2022.01 激活码-激活码分享2022.02.28

    (idea 2022.01 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~40ZKSWCX8G-eyJsaWNlb…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号