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.在做历史记录视图的时候,由于让键盘退出后才能触发表格的 didselect 那个代理方法,也就是得点两下才触发,而表格中的按钮点一下就可以立即响应. 2.于是我就有了用按钮事件代替 ...
- spring源码学习之路---环境搭建(一)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近已经开始了spring源 ...
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefa ...
- linux 中修改root的密码
修改root密码 有的时候会出现忘记了root 用户密码的情况,再次我们可以通过进入single(单)用户模式,将root的密码重新设置,然后重启登录即可. 具体流程: 1.先登录root用户(密码已 ...
- ArcGIS 设置地图显示范围大小(全屏显示)
Arcmap的FullExtent默认是地图加载的时候的extent.其实这个fullExtent是可以设置的. 打开ArcMap,选择左边图例的Layers ,右键点击,选择“Properties. ...
- 复制 VS 复用 -04
(续上篇) 小菜:“我明白了,他说用任意一种面向对象语言实现,那意思就是要用面向对象的编程方法去实现,对吗?OK,这个我学过,只不过当时我没想到而已.” 大鸟:“所有编程初学者都会有这 ...
- java判断文件是否存在
1.判断远程服务器上文件 import java.net.HttpURLConnection; import java.net.URL; public boolean checkRemoteFile( ...
- php链接数据库
1:找到 ySQL服务器 $conn = mysql_connect("localhost","","") or die("链 ...
- Eclipse上的项目分享到GitHub
1. 右击项目:team --> Share Project 2. 在弹出的选择框中选择 Git ,点击Next 3. Configure Git Repository 按照下图选择,点击Fin ...
- bind绑定事件,摁回车键提交查询,点击查询也可以提交查询
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...