oracle connect by 学习

news2025/2/26 15:45:05

【Connect by 层次查询】 https://www.bilibili.com/video/BV1jV411t7CB/?share_source=copy_web&vd_source=d88a617727cccf1c106d623afec0c6b6

简单来说这个connect by 就是为了查父子节点的。

CREATE  TABLE test.emp (id varchar(10),name varchar(10),manager_id varchar(10));

INSERT INTO test.emp
select 1,'小明',NULL  from dual union all 
select 2,'小李',1 from dual union all 
select 3,'小张',1 from dual union all 
select 4,'小王',2 from dual union all 
select 5,'小周',4 from dual union all 
select 6,'小赵',3 from dual union all 
select 7,'小吴',3 from dual

 

 下面来学习connect by的语法。

首先我们查父子关系,需要明确两点!!

1. 从哪个节点查询,比如上面 我们是从老板开始 还是经理开始,还是从员工开始

2.节点之间的关系是什么? 比如从经理开始 我们是要查经理的manger还是经理下面的employer

由此引发出语法。

1 start with 

    从哪条数据开始 start with id =1  / start with id in (2,3)

2. connect by 

    连接关系肯定是 id =manger_id  但是这个如何表表示我们想查manger还是employer呢?

    由此引出了一个关键字 prior

    prior id =manger_id 代表父节点的id = 子节点的manager_id 也就是我们从老板查经理查员工

    prior manger_id=id 代表父节点的manager_id=子节点的id,从员工查经理查老板

   简单的理解prior英文=先前的    所以先前的就代表 startwith的哪些条件,start with 不是确定哪个人了吗? 所以就是

prior id =manger_id那个人的id = 其他人的manger_id 就是往下查询

以该图为例 我们开始从小明查 所以 start with name='小明'

查小明的下属 也就是 小明的 id=其他的 manger_id -> prior id =manger_id

SELECT * 
FROM test.emp 
START  WITH name ='小明'
CONNECT BY PRIOR id=manager_id 

 

看着好像很不起眼,和之前的select *没有区别,但是是有区别的。但确实区别不大,

为了让人更加直观的看出结果此时再次引出一个关键字

level

上面的树状图中 小明处在第一层级,小张小李出在第二层级,这样很容易区分哪些数据处于同一层级

SELECT t.*,LEVEL  
FROM test.emp t 
START  WITH name ='小明'
CONNECT BY PRIOR id=manager_id 

 这个图虽然表表示了层级关系,但是对于小明下面的层级关系还是不太清晰,假设表里数据有几十万条,最终的老板也有好几个,有可能员工a处于第10层级,我们怎么快速的判断a的老板是谁呢?

1.按照以前的方式 a的上一层经理是a1,在查a1的上层经理是a2,继续查a3,查a4.。。。

2.根据刚刚学的 start with name='a'  connect by prior manager_id=id

3. 引出一个方法

sys_connect_by_path

看这个方法名就可以看出来,肯定和connect有关,by_path,代表把所有路径的数据都整合起来。

SELECT t.*,LEVEL  ,SYS_CONNECT_BY_PATH(name ,'->')
FROM test.emp t 
START  WITH name ='小明'
CONNECT BY PRIOR id=manager_id 

 

 最终的结果 也很好看 ->小明->小李->小王->小周  很清晰的表明了层级关系。

--------------------------------------------------------------

再说一说 connect by 的其他用法。

1.构造序列

SELECT LEVEL FROM dual CONNECT BY LEVEL<5

2.制造测试数据

 select rownum as id,
        to_char(sysdate + rownum / 24 / 3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,
        trunc(dbms_random.value(0, 100)) as random_id,
        dbms_random.string('x', 20) random_string
from dual
        connect by level <= 10; --想要多少条就有多少条

 还有什么排列组合 啥用没有 不说了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java的位运算

目录 1 Java中支持的位运算 2 位运算规则 3 逻辑运算 3.1 与运算&#xff08;&&#xff09; 3.2 或运算&#xff08;|&#xff09; 3.3 异或运算&#xff08;^&#xff09; 3.3 取反运算&#xff08;~&#xff09; 4 位移操作 4.1 左移&#xff08;<<&#…

Steam-V Rising 私人服务器架设教程

一、安装前的准备 一台服务器 拥有公网IP并且做好了端口映射 二、使用SteamCMD安装服务器 1.下载SteamCMD SteamCMD是Steam专用的命令行式客户端程序&#xff0c;所有的安装方式可以参照&#xff1a;https://developer.valvesoftware.com/wiki/SteamCMD 或者在其他站点自行…

yum、yumdownloader学习

yum命令 https://blog.csdn.net/Netfilter007/article/details/103873293 yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器。 常用命令 显示&#xff1a;yum list xxx 安装&#xff1a;yum install xxx 升级&#xff1a;yum update xxx 删除&#xff1a;yum remov…

JAVA开发与运维(web生产环境部署)

web生产环境部署&#xff0c;往往是分布式&#xff0c;和开发环境或者测试环境我们一般使用单机不同。 一、部署内容 1、后端服务 2、后台管理系统vue 3、小程序 二、所需要服务器 5台前端服务器 8台后端服务 三、所需要的第三方组件 redismysqlclbOSSCDNWAFRocketMQ…

mac 安装mongodb 无法打开 mongod 无法验证开发者

https://www.mongodb.com/try/download/community 一、下载解压 下载的tgz包&#xff0c;解压到本地 /usr/local 目录下 二、编辑.bash_profile 文件 终端输入命令打开并编辑 .bash_profile 文件 open .bash_profile .bash_profile文件最下面新增一行mongodb相关配置&#x…

leetcode142_环形链表 II

文章目录 题目详情分析Java完整代码 题目详情 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给…

【5天打卡】学习Lodash的第四天——安全漏洞学习

安全漏洞的问题一直是大家关心的问题&#xff0c;仿佛是巧合&#xff0c;在云视频会议服务提供商 Zoom 刚刚被爆出存在”零日漏洞“威胁 Mac 用户隐私和信息安全的同时&#xff0c;开发者熟知的 npm 库 Lodash 也被爆出存在高严重性安全漏洞——”原型污染“漏洞&#xff0c;该…

全网最新版ChatGLM-6B开源模型环境详细部署及安装——如何在低显存单显卡上面安装私有ChatGPT GPT-4大语言模型

目录 前言前期准备电脑要求安装anaconda安装相应版本的CUDA配置ChatGLM-6B Conda环境安装pytorch ChatGLM-6B最新版模型环境部署及安装源码下载模型下载相关库安装运行web演示作为API部署 参考资料其它资料下载 前言 ChatGPT的爆火让许多公司和个人都想要开发自己的大型语言模…

多模态之clip

论文&#xff1a;Learning Transferable Visual Models From Natural Language Supervision Github&#xff1a;https://github.com/OpenAI/CLIP OpenAI出品 论文通过网络爬取4亿(image, text)对&#xff0c;使用对比学习的方法训练得到clip&#xff08;Contrastive Languag…

golang 输出固定位数的整数

需求&#xff1a;将0输出为000,99输出为099 c# Console.WriteLine(0.ToString("000")); Console.WriteLine(99.ToString("000"));go fmt.Printf("%03d", 0) fmt.Printf("%03d", 99)运行效果&#xff1a;

深入浅出Java中参数传递的原理

前言 今天&#xff0c;想和大家聊聊关于java中的参数传递的原理&#xff0c;参数的传递有两种&#xff0c;值传递和引用传递。 值传递&#xff1a;是指在调用函数时将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;将不会影响到实际参…

windows系统 vmware17安装ubuntu server 22.04.2

vmware17 创建虚拟机 新建虚拟机 选择镜像文件&#xff1a;我这个镜像文件是需要联网才能安装的 设置虚拟机名称&#xff0c;设置存储路径 根据用户实际使用情况设置合适的大小&#xff1a;比如我是用来安装wvp平台的&#xff0c;20g太小&#xff0c;导致安装出现问题。 最…

scratch猫猫的儿童节 中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析2023年3月

目录 scratch猫猫的儿童节 一、题目要求 1、准备工作 2、功能实现 二、案例分析

如何使用java编写差分进化算法

差分进化算法属于一种进化算法,以全局最优性、收敛速度快等特点,得到很多学者的关注,并将其扩展到参数优化、数值优化、工程优化、路径优化、机器学习等一系列研究中。 而差分进化算法的原理即过程又是什么呢? 一、什么是差分进化算法 差分进化算法的原理属于内部寻优机…

假期出行小程序+chatgpt旅游攻略

马上五一了&#xff0c;如果想出去旅游&#xff0c;需要提取规划好路线图&#xff0c;我们可以借助chatgpt的路线规划功能帮我们生成一份攻略&#xff0c;按照攻略我们就可以愉快的出去玩耍了。 本文结合chatgpt&#xff0c;利用低代码工具帮我们制作一份旅行导览小程序&#…

揭秘!我用AI写了一部精彩小说;搭建AI视频创作工作流;一键生成摘要工具清单;大模型创业生死5问 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『大型语言模型 (LLM) 进化树』追踪近年来语言模型的发展 作者团队梳理了自2018年以来大语言模型的发展历程&#xff0c;并可视化成了…

Windows Vscode 远程连接Ubuntu, vscode检测到#include错误请更新includePath的解决方法

&#xff08;闭坑&#xff09;首先&#xff0c;我们要明白一点&#xff0c;就是我们在windows用vscode 远程连接了Ubuntu后&#xff0c;我们的Vscode的环境就是Ubuntu,不再是window了&#xff0c;所以出现问题&#xff0c;应该想到的是Ubuntu上的环境问题&#xff0c;而不是win…

Android逆向实战(一)腾讯新闻去开屏广告

上次反编译一个工具类app失败&#xff0c;原因是使用了360加固&#xff0c;回编译后无法启动。一般来讲&#xff0c;大厂的app考虑到性能、兼容性、包体积等&#xff0c;通常不用加固。因此&#xff0c;本次我们选一个大一些的app-腾讯新闻。写在前面&#xff1a;本篇博客仅用来…

优秀简历的HR视角:怎样打造一份称心如意的简历?

简历的排版应该简洁工整&#xff0c;注重细节。需要注意对齐和标点符号的使用&#xff0c;因为在排版上的细节需要下很大功夫。除此之外&#xff0c;下面重点讲述几点简历内容需要注意的地方。 要点1&#xff1a;不相关的不要写。 尤其是与应聘岗位毫不相关的实习经历&#x…

记一次峰回路转的注入

0X01 背景 自己之前写过一篇记录&#xff0c;当时是由于之前是一位校友刚做开发&#xff0c;叫我友情帮忙测试一波&#xff0c;由于是开发的新手&#xff0c;漏洞比较多&#xff0c;所以直接从注入开始讲起&#xff0c;但是到getshell的过程也算是一场峰回路转再跌跌撞撞的路程…