Oracle CONNECT BY、PRIOR和START WITH关键字详解

Oracle CONNECT BY、PRIOR和START WITH关键字详解

        • 1. 基本概念
        • 2. 数据示例
        • 3. SQL示例
          • 3.1. 查询所有员工及其上级
          • 3.2. 显示层次结构
          • 3.3. 查询特定员工的子级
        • 4. 结论

在Oracle数据库中,CONNECT BYPRIORSTART WITH关键字主要用于处理层次结构数据,例如组织结构、分类目录等。这些关键字通常与SELECT语句一起使用,以生成层次结构的查询结果。对于初级Oracle程序员来说,理解这些关键字的用法是非常重要的,因为它们可以帮助你更有效地处理和展示层次数据。

1. 基本概念
  • CONNECT BY: 这个关键字用于指定层次查询的连接条件,即如何从一个节点找到它的子节点。
  • PRIOR: 这个关键字用于指定层次查询中的父节点。通常与CONNECT BY一起使用。
  • START WITH: 这个关键字用于指定层次查询的根节点,即查询的起点。
2. 数据示例

假设我们有一个简单的员工表EMPLOYEES,其中包含员工ID (EMPLOYEE_ID)、员工姓名 (EMPLOYEE_NAME) 和上级ID (MANAGER_ID)。上级ID指向该员工的直接上级。如果一个员工没有上级,那么MANAGER_IDNULL

CREATE TABLE EMPLOYEES (EMPLOYEE_ID NUMBER PRIMARY KEY,EMPLOYEE_NAME VARCHAR2(50),MANAGER_ID NUMBER
);INSERT INTO EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID) VALUES (1, '张三', NULL);
INSERT INTO EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID) VALUES (2, '李四', 1);
INSERT INTO EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID) VALUES (3, '王五', 1);
INSERT INTO EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID) VALUES (4, '赵六', 2);
INSERT INTO EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID) VALUES (5, '孙七', 2);
INSERT INTO EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID) VALUES (6, '周八', 3);COMMIT;
3. SQL示例
3.1. 查询所有员工及其上级

我们可以使用CONNECT BYPRIOR关键字来查询所有员工及其上级。这里,我们使用PRIOR来指定上级员工的ID。

SELECT EMPLOYEE_NAME, MANAGER_ID
FROM EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID;

输出结果,

在这里插入图片描述

这个查询从没有上级的员工(即MANAGER_ID IS NULL)开始,然后通过CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID来连接每个员工与其上级。结果将显示所有员工及其上级。

3.2. 显示层次结构

为了更清晰地显示层次结构,我们可以使用LEVEL伪列来表示每个员工的层级。

SELECT LPAD(' ', 2*(LEVEL-1)) || EMPLOYEE_NAME AS "Employee Name", LEVEL
FROM EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID;

输出结果,

在这里插入图片描述

在这个查询中,LPAD函数用于在员工名字前添加空格,以视觉上表示层级关系。LEVEL伪列表示每个员工在层次结构中的层级。

3.3. 查询特定员工的子级

如果我们只想查询某个特定员工的所有下属,可以使用START WITH来指定这个员工。

SELECT LPAD(' ', 2*(LEVEL-1)) || EMPLOYEE_NAME AS "Employee Name", LEVEL
FROM EMPLOYEES
START WITH EMPLOYEE_NAME = '李四'
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID;

输出结果,

在这里插入图片描述

这个查询将从名为“张三”的员工开始,然后列出他的所有下属,包括间接下属。

4. 结论

CONNECT BYPRIORSTART WITH是Oracle数据库中处理层次结构数据的强大工具。通过这些关键字,你可以轻松地查询和展示复杂的组织结构或分类目录。对于初级Oracle程序员来说,掌握这些关键字的用法将极大地提升你的数据库查询能力。

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

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

相关文章

5、JavaScript(四) ajax+js高级+BOM

25.ajax : 前端向后端异步的取数据而无需刷新页面的技术 1 公司中的整体工作流程 1、项目开发的流程 每个职位该做的工作: 产品经理:提需求的 与客户沟通 画出原型图给程序员使用 UI设计师:美化 替换UI框架:antd element-ui e…

sql-labs靶场第十六关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库,查看数据库名称 ③爆表,查看security库的所有表 ④爆列,查看users表的所有列 ⑤成功获取用户名…

学习--四元数介绍

2022年的草稿箱里的一篇 四元数由William Rowan Hamilton发现 定义与复数类似,有三个虚部 q a b i c j d k qabicjdk qabicjdk 其中 i 2 j 2 k 2 i j k − 1 i^2j^2k^2ijk-1 i2j2k2ijk−1 四元数的模长: 四维的长度 加减法: 对应分…

linux-牛刀小试

题目一: 1.第一问 首先创建用户tab在超级用户root的终端输入useradd tab 切换到tab用户: 推出重新登录到tab用户或者su – tab切换到tab用户 2.第二问 在桌面创建SHEGNCHAN目录 在SHENGCHAN文件夹下创建相应的文件: 3.第三问 首先&#…

笔记本使用虚拟机,使用Ubuntu打开摄像头

最近在搞ros相关的内容,亲测了一下虚拟机Ubuntu打开摄像头,也是需要简单的设置的。 只需要 简单设置这四步 目录 设置usb3.1打开摄像头查看摄像头显示摄像头内容 设置usb3.1 这一步是为了防止打开摄像头的时候,没有画面。 打开摄像头 选…

V4L2驱动框架

文章目录 一、V4L2简介二、v4l2驱动关键组件(一)video_device结构体v4l2操作方法结构体v4l2的ioctl操作方法结构体 (二)v4l2_device结构体 一、V4L2简介 V4L2,即Video for Linux two,是Linux内核中用于视频…

Linux Redis查询key与移除日常操作

维护老项目Express node 编写的后端程序、有这么一个方法、没有设置redis过期时间(建议设置过期时间,毕竟登录生产服务器并不是每个人都有权限登录的!!!)。如果变动只能通过登录生产服务器、手动修改… 于…

本地docker部署中间件和应用

Docker Desktop搭建 安装完成之后使用docker下载镜像,报以下错误: 解决办法: Docker Engine配置能访问的镜像地址: {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled…

使用 Elasticsearch 作为向量数据库询问有关你的 GitHub 存储库的问题

作者:来自 Elastic Fram Souza 本博客介绍了使用 RAG 和 Elasticsearch 实现语义代码查询的 GitHub Assistant,提供对 GitHub 存储库的洞察,并可扩展到 PR 反馈、问题处理和生产准备情况审查。 该项目允许你直接与 GitHub 存储库交互并利用语…

【YOLOv11】制作使用YOLOv11的docker环境

目录 一 安装docker 1 安装依赖 2 添加docker官网 GPG 密钥、设置stable 仓库 3 安装 4 使用 二 环境制作 ① 拉基础镜像 ② 起容器 ③ 安装Anaconda3 ④ 安装YOLO11 ⑤ /root/.bashrc ⑥ 退出容器 ⑦ 保存镜像 ⑧ 镜像的使用 一 安装docker ubuntu:20.04 1 安装…

Java项目-基于springboot框架的人职匹配推荐系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

【LeetCode】每日一题 2024_10_24 找到连续赢 K 场比赛的第一位玩家(模拟/脑筋急转弯)

前言 每天和你一起刷 LeetCode 每日一题~ 1024 程序员节快乐~ LeetCode 启动! 题目:找到连续赢 K 场比赛的第一位玩家 代码与解题思路 题目让我们从第一个元素开始让数组中的元素排队一个个打擂台,直到找到最先赢下 k 次的元素编号 因为…

代码随想录算法训练营第六天|454四数相加II、 383赎金信、15三数之和、18四数之和

day06 1. 454四数相加II 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。定义int变量count,用来统计 …

系统性能优化的终极武器,一键让你的电脑焕发第二春

作为Windows系统维护的得力助手,PC Fresh为用户带来全方位的电脑优化解决方案。这款智能系统工具采用先进的检测引擎,不仅能够实时监控计算机的运行状态,更可以精准定位影响性能的潜在问题。通过智能诊断技术,软件会针对每台电脑的…

多去尝试 AI 产品经理面试,你会意外发现……

前言 这两天跟很多做程序员的朋友聊天,怎么看全网火爆的大模型。让我挺意外的是,大家的反馈普遍都很焦虑 。 在AI大模型微调领域的产品经理面试中,总会遇到一系列与技术细节、项目经验、市场趋势以及职业规划相关的问题。以下是一些建议的面…

GEE引擎传奇UI界面修改教程

还记得小林之前给大家分享了gom引擎UI界面编辑教程,今天给大家分享一下gee引擎UI界面修改教程 首先打开登录器生成器-客户端界面设置 在客户端界面设置这里可以自定义UI素材,也可以直接在原素材上编辑主界面 传奇根目录指向的是你的传奇客户端根目录&am…

【LaTeX】调整itemize中item的间距

LaTeX中调整itemize中item的间距 1. 使用 \setlength 调整间距2. 使用 enumitem 宏包来更灵活地调整 在 LaTeX 中,调整 itemize 列表中各项 (item) 的间距可以通过以下方法实现: 1. 使用 \setlength 调整间距 通过 \setlength 调整列表项之间的间距。两…

【随手笔记】远程升级之如何平衡下载包大小与速率?

1. 远程升级基本信息 使用NB_BC26模组,通过AT指令使用TCP的协议与公司后台交互升级的固件为BIN文件,使用原始固件包升级,未使用差分方式原始固件包有110K,大小左右,固件的存储为外置的FLASH W25Q16,w25q16最小存储单位为页&#…

BurpSuit 安装Jpython 和Json-Hunter脚本

0x00下载Jpython jpython2.7.2下载的人最多,所以我就安装2.7.2了 Central Repository: org/python/jython-standalone/2.7.2 点击下载即可。 0x01BP设置jpython环境 重点:Jpython和Jsonp-Hunter一定要放在英文目录下。 0x02安装Jsonp-Hunter https:…

基于Python和OpenCV的疲劳检测系统设计与实现

项目运行 需要先安装Python的相关依赖:pymysql,Django3.2.8,pillow 使用pip install 安装 第一步:创建数据库 第二步:执行SQL语句,.sql文件,运行该文件中的SQL语句 第三步:修改源…