Oracle Start With 关键字

1.问题描述

在主销售品目录模块查询目录节点下的销售品用到此关键字。使用此关键字能够解决层级结构的查询问题。

2. 基本语法

SELECT ... FROM + 表名WHERE + 条件3 START WITH + 条件1 CONNECT BY PRIOR + 条件2

描述:

条件1:
表示从哪个节点开始查找, 也就是通过条件1 查询到的数据, 作为后续查询的起始节点(参数).

当然可以放宽限定条件,如 ID in (‘00001’, ‘00011’)以取得多个根节点,也就是多棵树;在连接关系中,除了可以使用列明外,还允许使用列表达式。

如果省略Start With

就默认把所有满足查询条件的Tree整个表中的数据从头到尾遍历一次,每一个数据做一次根,然后遍历树中其他节点信息.

条件2:
是连接条件,其中用PRIOR表示上一条记录,例如CONNECT BY PRIOR ID = PID,意思就是上一条记录的ID是本条记录的PID,即本记录的父亲是上一条记录。CONNECT BY子句说明每行数据将是按照层次顺序检索,并规定将表中的数据连入树形结构的关系中。

Prior 在父节点的一侧表示, 自底向上查, 在 子节点的一侧表示 自上向下查询;

条件3:
不能用在 Connect By 后, 这里的条件判断, 等价于 在最后查询出结果列表之后, 再进行条件筛选; 并非 删除掉 节点及子节点;

举例
ID, DSC, PID;三个字段, 分别表示 当前标识的 ID(主键), DSC 当前标识的描述, PID 其父级ID, 比较典型的例子 是 国家, 省, 市 这种层级结构;

省份归属于国家, 因此 PID 为 国家的 ID, 以此类推;

--自上向下Select * From DEMOStart With ID = '00001'--用 Start Wiht PID = '-1' 结果不变 Connect By Prior ID = PID--结果 ID    DSC    PID00001 中国 -1 00011 陕西 0000100111 西安 0001100112 咸阳 00011 00113 延安 00011 00012 贵州 00001 00013 河南 00001

说明

1.查出第一个条件为ID = '00001’的结果:00001 中国 -1
2.

Select * From DEMOWhere ID = PID :左边条件为第一步查出来的条件所以为:00001 =PID

所以结果为:00011 陕西 00001

3.循环1、2步直到查出所有

3.其他关键字

nocycle:消除数据本身不合理情况导致的循环。如:中国的ID与PID都为00001时将一直循环。

SIBLINGS: 关键字:它会保护层次,并且在每个等级中按expre排序。

例如:

Select ID, PID, DSC, connect_by_isleaf, LEVELFrom DEMOStart With ID = '00001' Connect By nocycle Prior ID = PIDORDER SIBLINGS By DSC

相关介绍链接:

https://blog.csdn.net/weiwenhp/article/details/8218091

https://www.cnblogs.com/zyzdisciple/p/7873584.html

Oracle中Start With的用法相关推荐

  1. oracle中的merge into用法解析

    oracle中的merge into用法解析 merge into的形式 MERGE INTO [target-table] A USING [source-table sql] B ON([cond ...

  2. oracle中over()分析函数的用法

    摘自: http://www.poluoluo.com/jzxy/201004/81921.html 百度文库也记载了oracle中over()分析函数的用法 在泡坛子的时候中无意中发现了这个函数,才 ...

  3. oracle中的to_number,Oracle中to_number()函数的用法

    to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...

  4. Oracle中to_char()函数的用法

    Oracle中to_char()函数的用法 日期转换: to_char(date,'格式') select to_date('2005-01-01 ','yyyy-MM-dd') from dual; ...

  5. oracle to_char函数格式,oracle 中to_char函数的用法

    一.日期格式转换 to_char(date,'格式'); select to_date('2005-01-01 ','yyyy-MM-dd') from dual; select to_char(sy ...

  6. Oracle中add_months()函数的用法

    Oracle中add_months()函数的用法 查询当前时间n个月以前的时间: select add_months(sysdate,-n) from dual; 查询当前时间n个月之后的时间: se ...

  7. oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  8. Oracle中游标Cursor基本用法详解

    这篇文章主要介绍了Oracle中游标Cursor基本用法详解,还是比较全面的,具有一定参考价值,需要的朋友可以了解下. 查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT ...

  9. oracle分类函数总结,oracle中分组排序函数用法

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  10. Oracle中ROW_NUMBER() OVER()函数用法

    Oracle中ROW_NUMBER() OVER()函数用法 1. 说明:ROW_NUMBER() OVER() 函数的作用:分组排序 2. 原理: row_number() over() 函数,ov ...

最新文章

  1. 在RHEL上实现OpeenSSH
  2. 订单最小量限制的增强
  3. 30+个必知的《人工智能》会议清单
  4. 常用计算机类型包括个人计算机,网络教育统考《计算机应用基础》多媒体技术模拟题(二)...
  5. 配置 docker0 网桥
  6. html5折叠卡片,基于HTML5折叠卡片式下拉菜单代码
  7. java shark_JAVA项目开发笔记(3)Shark部分: Shark API | 学步园
  8. Mask-Predict: Parallel Decoding of Conditional Masked Language Models
  9. 机器学习-样本集(包括训练集及测试集)的选取
  10. Linux Linux函数 Linux聊天程序 基于socket的TCP(有连接的)聊天程序
  11. Linux学习之旅(二)Linux文档操作
  12. android 15.6寸平板,关于HUAWEI 华为M6 10.8英寸平板的槽点,不吐不快
  13. Linux内核编程《一》
  14. java抽象类详细介绍
  15. 主流无线芯片厂商的自动信道选择算法小结
  16. vue之设置背景图片自适应屏幕
  17. 流程审批类系统数据库结构怎么定义
  18. 2、java的应用领域
  19. 项目实战!Python分析广州房地产市场,房价还会再涨吗?
  20. Matplotlib数据可视化高级

热门文章

  1. 吴莫愁公布恋情爱上哈林 演唱会庾澄庆单膝跪地似求婚
  2. WPS和office办公软件的word同时存在时,想用office的word的解决办法
  3. 《程序员》2012年4期精彩内容:创业
  4. 图像和像素(Images and Pixels)
  5. WorkNC3D沿面精加工快速修圆小技巧
  6. MacBook 强制关机的四种方法
  7. 嵌入式开发必须学习qt吗?
  8. 谁能谈谈国外软件行业的实际情况么?(全美“50大好差事” 软件工程师排名第一)...
  9. 3D游戏建模新手入门到就业,高效学习的十二个步骤
  10. 活性染料(反应染料)