oracle用START WITH...CONNECT BY PRIOR子句实现递归查询

 
今天发现在oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:

select ... from tablename start with cond1
connect by cond2
where cond3;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。

用上述语法的查询可以取得这棵树的所有记录。

其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。
COND3是过滤条件,用于对返回的所有记录进行过滤。

对于oracle进行简单树查询(递归查询)
DEPTID PAREDEPTID NAME
NUMBER NUMBER CHAR (40 Byte)
部门id 父部门id(所属部门id) 部门名称
通过子节点向根节点追朔.
Java代码 复制代码
  1. select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid    
select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid  

通过根节点遍历子节点.
Java代码 复制代码
  1. select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid    
select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid  


可通过level 关键字查询所在层次.

Java代码 复制代码
  1. select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid     
select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid   


再次复习一下:start with ...connect by 的用法, start with 后面所跟的就是就是递归的种子。

递归的种子也就是递归开始的地方 connect by 后面的"prior" 如果缺省:则只能查询到符合条件的起始行,并不进行递归查询;

connect by prior 后面所放的字段是有关系的,它指明了查询的方向。

练习: 通过子节点获得顶节点

Java代码 复制代码

   select FIRST_VALUE (deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid     

select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid
 

  
  1. CREATE OR REPLACE PROCEDURE P_DEL_DEPT_CASCADE(v_ID in varchar2)   
  2. IS   
  3. --注:删除一个部门时同时删除该部门下属的所有子部门   
  4. --其中 v_ID 是要删除部门的ID   
  5. BEGIN   
  6.   delete from CRS_OUT_DEPT    
  7.     where id in    
  8.         (select id from CRS_OUT_DEPT  connect by prior id=PARENT start with id =v_ID);   
  9. END;   
  10. /  

相关推荐

系统架构设计师教程 第4章 信息安全技术基础知识-4.5 密钥管理技术&4.6 访问控制及数字签名技术-解读

系统架构设计师教程(清华第二版) 第4章 信息安全技术基础知识-4.5 密钥管理技术&4.6 访问控制及数字签名技术-解读

Remon的专栏 1233

系统架构设计师教程 第4章 信息安全技术基础知识-4.3 信息安全系统的组成框架&4.4 信息加解密技术-解读

系统架构设计师教程 第4章 信息安全技术基础知识-4.3 信息安全系统的组成框架&4.4 信息加解密技术-两章节的详细解读

Remon的专栏 952

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识-解读

系统架构设计师教程(清华第二版)第4章 信息安全技术基础知识-4.1 信息安全基础知识-解读

Remon的专栏 1223

系统架构设计师教程 第3章 信息系统基础知识-3.8 典型信息系统架构模型-解读

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.8 典型信息系统架构模型-解读

Remon的专栏 1390

系统架构设计师教程 第3章 信息系统基础知识-3.7 企业资源规划(ERP)-解读

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.7 企业资源规划(ERP)章节的详细解读

Remon的专栏 1321

系统架构设计师教程 第3章 信息系统基础知识-3.6 办公自动化系统(OAS)-解读

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.6 办公自动化系统(OAS)章节的详细解读

Remon的专栏 1347

系统架构设计师教程 第3章 信息系统基础知识-3.5 专家系统-解读

系统架构设计师教程 第3章 信息系统基础知识-3.5 专家系统(ES)章节的详细解读

Remon的专栏 1228

系统架构设计师教程 第3章 信息系统基础知识-3.4 决策支持系统-解读

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.4 决策支持系统-解读

Remon的专栏 1191

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.3 管理信息系统(MIS)-解读

系统架构设计师教程(清华第二版)第3章 信息系统基础知识-3.3 管理信息系统(MIS)-详细解读

Remon的专栏 1091

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.2 业务处理系统-解读

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.2 业务处理系统的详细解读

Remon的专栏 1274

解读李彦宏说的“不要卷模型,要卷应用”

李彦宏说的“不要卷模型,要卷应用”的解读

Remon的专栏 906

系统架构设计师教程 第3章 信息系统基础知识-3.1 信息系统概述

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.1 信息系统概述 章节的详细解读

Remon的专栏 1519

系统架构设计师教程 第二章 计算机系统基础知识-2.9 系统性能

系统架构设计师教程(清华第二版) 第二章 计算机系统基础知识-2.9 系统性能 章节的解读

Remon的专栏 1426

系统架构设计师教程 第二章 计算机系统基础知识-2.8 系统工程

系统架构设计师教程(清华第二版) 第二章 计算机系统基础知识-2.8 系统工程 章节的解读

Remon的专栏 1456

系统架构设计师教程 第二章 计算机系统基础知识-2.7 多媒体

系统架构设计师教程(清华第二版) 第二章 计算机系统基础知识-2.7 多媒体 章节的详细解读

Remon的专栏 1006

ubuntu22.04 编译freetype动态库

简单介绍ubuntu22.04下编译安装freetype shared library的全过程

Remon的专栏 1172

系统架构设计师教程 第二章 计算机系统基础知识-2.6 计算机语言

系统架构设计师教程(清华第二版) 第二章 计算机系统基础知识-2.6 计算机语言 章节的详细解读

Remon的专栏 1394

系统架构设计师教程 第二章 计算机系统基础知识-2.5 计算机网络

系统架构设计师教程(清华第二版) 第二章 计算机系统基础知识-2.5 计算机网络 章节的详细解读

Remon的专栏 1466

系统架构设计师教程 第二章 计算机系统基础知识-2.4嵌入式系统及软件

《系统架构设计师教程》清华第二版 2.3嵌入式系统及软件 章节的详细解读

Remon的专栏 1055

系统架构设计师教程 第二章 计算机系统基础知识-2.3计算机软件

《系统架构设计师教程》清华第二版 2.3计算机软件 章节的详细解读

Remon的专栏 1211

系统架构设计师教程(清华第2版)<第2章 计算机系统基础知识>解读

《系统架构设计师教程》清华第二版 2.1 计算机系统概述及2.2计算机硬件 这两章节的详细解读

Remon的专栏 1548

系统架构设计师教程(清华第2版)<第1章 绪论>解读

系统架构的定义及发展历程、软件架构的常用分类及建模方法、系统架构的常用建模方法、如何成为一名好的系统架构设计师

Remon的专栏 2029

sklearn(Python机器学习库)介绍

简单介绍了、、、

Remon的专栏 2618

大数据开发语言scala入门

Scala语言概述、Scala在大数据开发中的应用、Scala编程基础、Scala与大数据生态系统整合

Remon的专栏 1486

决策树算法的原理与案例实现

决策树算法原理、决策树算法的优缺点、案例实现、在实际应用中的案例分析

Remon的专栏 1084

Ubuntu 22.04 安装中文字体

笔者在用OpenCV4.9处理图片加水印时,中文乱码。原来是Ubuntu 22.04发行版缺少中文字体支持,因此,笔者就找资料安装了需要的中文字体,特此记录,以备后查。这将安装Noto Sans CJK字体,这是一种非商业的开源字体,被Google用于其现代中文和其他东亚语言的网页字体。这将安装文泉驿正黑字体,常用于显示简体中文。这将安装文泉驿微米黑和ukai字体。

Remon的专栏 6276

Perl语言入门指南

重点介绍了Perl的基本语法、Perl的控制结构等Perm的入门级知识

Remon的专栏 1569

Linux下的Vim编辑器

重点介绍vim四种工作模式及基本操作命令

Remon的专栏 1280

数据结构算法之B树

介绍了B-Tree及其变种B+Tree、B*Tree的定义及特点;详细解释了B-Tree的插入、删除操作以及及查找及时间性能分析

Remon的专栏 1110

ubuntu 22.04下编译安装glog共享库

笔者是完美主义者,在编译opencv4.9时,有个有关glog的warn,就下载编译google的glog库并把它编译成shared libaray。重新编译opencv4.9时,该warn解除。现把编译安装glog过程记录,以备后查。以下操作全程以root身份或sudo执行。建议下载cmake最新版本编译。

Remon的专栏 985
下一篇: 拒用freemarker,这玩艺真的害人不轻
AncleLeen
AncleLeen 共享学习经验,共同进步 共享学习经验,共同进步
博客等级 码龄23年 679粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值