oracle分层查询中的start with和connect by(树结构查询)
sj_swjg_dm为空即根节点的排在第一个,仔细观察 上图是树结构查询结果,可能不太直观,看下图就清楚了
1. 树结构的描述
- select swjg_dm,swjg_mc,sj_swjg_dm,swjg_level
- from extern_dm_swjg
- connect by prior swjg_dm = sj_swjg_dm
- start with sj_swjg_dm is null
- select swjg_dm,swjg_mc,sj_swjg_dm,swjg_level
- from extern_dm_swjg
- connect by swjg_dm = prior sj_swjg_dm
- start with swjg_dm = '16107100004'
在查询中,可以使用伪列LEVEL显示每行数据的有关层次。LEVEL将返回树型结构中当前节点的层次,我们可以使用LEVEL来控制对树型结构进行遍历的深度。
- select level, swjg_dm,swjg_mc,sj_swjg_dm,swjg_level
- from extern_dm_swjg
- connect by prior swjg_dm = sj_swjg_dm
- start with sj_swjg_dm is null
伪列LEVEL为数值型,可以在SELECT 命令中用于各种计算。
例4 使用LEVEL改变查询结果的显示形式。
- select LPAD(LEVEL,LEVEL*3,' ') as "LEVEL", swjg_dm,swjg_mc,sj_swjg_dm,swjg_level
- from extern_dm_swjg
- connect by prior swjg_dm = sj_swjg_dm
- start with sj_swjg_dm is null
在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点(自顶向下检索时)或前辈节点(自底向顶检索时)。
- select LPAD(LEVEL,LEVEL*3,' ') as "LEVEL", swjg_dm,swjg_mc,sj_swjg_dm,swjg_level
- from extern_dm_swjg
- where swjg_dm !='16107100003'
- connect by prior swjg_dm = sj_swjg_dm
- start with sj_swjg_dm is null
- select LPAD(LEVEL,LEVEL*3,' ') as "LEVEL", swjg_dm,swjg_mc,sj_swjg_dm,swjg_level
- from extern_dm_swjg
- connect by prior swjg_dm = sj_swjg_dm
- and swjg_dm !='16107100003'
- start with sj_swjg_dm is null
当然WHERE子句可以和CONNECT BY子句联合使用,这样能够同时剪掉单个节点和树中的某个分支。
oracle分层查询中的start with和connect by(树结构查询)的更多相关文章
- 【杂记】mysql 左右连接查询中的NULL的数据筛选问题,查询NULL设置默认值,DATE_FORMAT函数
MySQL左右连接查询中的NULL的数据筛选问题 xpression 为 Null,则 IsNull 将返回 True:否则 IsNull 将返回 False. 如果 expression 由多个变量 ...
- 编写高质量代码改善C#程序的157个建议——建议31:在LINQ查询中避免不必要的迭代
建议31:在LINQ查询中避免不必要的迭代 无论是SQL查询还是LINQ查询,搜索到结果立刻返回总比搜索完所有的结果再将结果返回的效率要高. 示例代码: class MyList : IEnumera ...
- 编写高质量代码改善C#程序的157个建议——建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T>
建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:E ...
- Oracle 树操作、递归查询(select…start with…connect by…prior)
一.Oracle中start with…connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是:select … from tablename start ...
- Oracle中 “ORA-14551: 无法在查询中执行 DML 操作” 如何解决
在编写一个数据库函数时,方法实现需要查询后进行修改,出现ora-14551的错误 create or replace function fun_DxcBillSn(tabType integer,ta ...
- Oracle子查询中any、some、all之间的区别
用some,any和all对子查询中返回的多行结果进行处理. 下面我们来简单介一下这几个关键词的含义. * Some在此表示满足其中一个的意义,是用or串起来的比较从句. * Any也表示满足其中一个 ...
- oracle 子查询中null的问题(in 和 not in)
这里的in后面的句子可以理解为or拼接,简单举例即 in (9566,9839,null)可以等价于mgr=9566 or mgr=9839 or mgr=null, not in (9566,983 ...
- oracle 查询中实现分页
那么Oracle如何实现分页呢?--Oracle分页查询SELECT * FROM ( SELECT ROWNUM R,YANGCQ_ID,YANGCQ_BRANCHI ...
- Oracle系列——开发中奇葩问题你遇到几个(一)
前言:在使用oracle数据进行开发的时候有没有经常出现一些很奇怪.很纳闷.很无厘头的问题呢.下面是本人使用oracle一段时间遇到的问题小节,在此做个记录,方便以后再遇到类似的问题能快速解决.如果你 ...
随机推荐
- IOS 蓝牙相关-基础知识(1)
蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...
- Linux多线程实例练习 - pthread_create()
Linux多线程实例练习 pthread_create():创建一个线程 int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, ...
- linux下获取本机IP
转载:http://blog.chinaunix.net/uid-20593763-id-1620213.html 源代码级Unix/Linux 通用网卡IP地址获取方法 在Unix和Linux系统下 ...
- pthread_creat()解析及需注意的地方
函数声明 int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn ...
- intellij idea 插件 ideaVim
像Eclipse一样,idea这个公认最好的javaIDE也有Vim插件. 安装方法 File>Settings>Plugins>Install JetBrains plugin.. ...
- css小记(3)
1.只有块级元素可以设置背景图,行内元素要变成块级元素才可以:2.盒子不设置宽度,只设置高度,默认为100%,并自适应屏幕大小变化,为这个盒子设置margin可以在保证margin效果的同时默认调整盒 ...
- c#语句 类
知识点: 1.string类 2.Math类 3.DateTime 获取时间 for穷举 1.羽毛球拍15元,球3元,水2元.现有200元,每种至少买一个,共有多少种可能.
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
APP的测试重点小部分在APP本身,大部分还是在网络通信上(单机版除外).所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议.Websocket.socket协议,一 ...
- GridView的详细用法
l GridView无代码分页排序 l GridView选中,编辑,取消,删除 l GridView正反双向排序 l GridView和下拉菜单DropDownList结合 l GridView和Ch ...
- ASP.NET中如何读取和写入注册表
直接给源码: 读取注册表内容: RegistryKey regkey=Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Window ...