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一段时间遇到的问题小节,在此做个记录,方便以后再遇到类似的问题能快速解决.如果你 ...
随机推荐
- java enum(枚举)使用详解 + 总结
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始 ...
- Hashtable在ViewState中无法增加值
在我调试程序的时候,我发现WebForm 2.0和MVC3解析ViewState的方式不同,同样的代码,在Weorm中管用,在MVC中不起作用. private Hashtable ht { get ...
- android-GridView控件的使用
GridView 按行列方式显示多个组件(二维布局界面) 数据源(集合)-适配器(SimpleAdapter)-视图界面(GridView),加载适配器-配置监听器(OnItemClickListen ...
- $.ajax用法与举例
下面是一段比较常用到的 $.ajax 方法: $.ajax({ type:'GET', url:'http://www.phpernote.com/jquery.php', data:{usernam ...
- .net 新闻点击量修改,避免恶意刷新
DataTable dt = bll.GetNewsByID(id);//根据ID获取的新闻详细内容 if (dt != null && dt.Rows.Count > 0) { ...
- vbox下Oracle Enterprise liunx5.4虚拟机安装10G RAC实验(二)
接第一篇 http://www.cnblogs.com/myrunning/p/3993824.html 3.集群方面的配置 3.1配置hosts文件 此配置需要在两个节点都要配置. 3.2配置 Ha ...
- 获取Java系统相关信息
package com.test; import java.util.Properties; import java.util.Map.Entry; import org.junit.Test; pu ...
- SQL,LINQ,Lambda语法对照图(转载)
如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...
- centos重启不能自动联网的解决方法
在命令行下输入 下面的ifcfg-eth0,eth0为我的网卡名字.机器之间不同,请先查看自己网卡的名字 vi /etc/sysconfig/network-scripts/ifcfg-eth0 进行 ...
- IOS第15天(1,事件处理View的拖拽)
*******view 一些方法 #import "HMView.h" @implementation HMView // 一个完整的触摸过程 // touchesBegan -& ...