当前位置:首页 > 数据库 > 正文内容

浅析REGEXP_SUBSTR,PRIOR,CONNECT BY

邻居的猫1个月前 (12-09)数据库786

事务场景

image

teacher表中的tech_class字段存储的是每个教师所教授的课程,课程之间以英文逗号分隔。现在要用句子计算每个课程对应的教师数量。句子及作用如下:

image

句子其实很简略,各种博客或许gpt都有不错且可行的解决方案,咱们主要来理解下这段句子的履行原理,更好的学习。

part1 REGEXP_SUBSTR

关于REGEXP_SUBSTR的官方文档

详细语法这儿不再赘叙,咱们从单个比如下手看看作用:

image

image

REGEXP_SUBSTR能够将字段字符串依据所给正则表达式匹配并拆分(留意不是切割,但作用上等同于切割)。

最终一个参数代表要取出第几个匹配的成果:

image

那为什么这儿要运用LEVEL?LEVEL是什么?

关于LEVEL的官方解说 详细如图:

image

运用之前要留意,官方文档里有句话:

To define a hierarchical relationship in a query, you must use the CONNECT BY clause.

所以关于connect by,你能够先往后看。

运用LEVEL后的作用:

image

LEVEL是一个在CONNECT BY子句中运用的伪列,它代表当时递归层次的等级。在每次递归调用中,LEVEL的值会增加1。在这个比如中,LEVEL的值会从1开端,一直到tech_class中逗号分隔的子串的数量——3。

为什么这样会有81条?咱们的预期成果其实是3条。让咱们持续探求......

image

image

image

Football是字段里的第一个值,只要1条;Basketball是字段里的第二个值,有10条;PingPang是字段里的第三个值,有70条!形似越往后数据重复越多,并且次数增加的可怕,但很难发现出有什么规则。检索后根本确认呈现重复数据是因为在递归过程中,regexp_substr函数没有正确移动到下一个匹配项,而是重复移动到了Basketball或许PingPang,至于它底层是什么重复移动的,额我也没搞理解....。

对此咱们需求增加prior确保每次递归时都能正确提取。

part3 prior

关于prior的简略介绍
connect by中加prior能够限制父子的对应联系,限制递归途径。这儿对同条记载进行递归:

image

加sys_guid()是为了确保层次查询,存在循环时,不呈现无限递归。它为每行生成一个仅有标识,然后防止无限循环。

Part3 connect by

CONNECT BY的官方文档--分级查询
connect by常常结合prior一同完成父级查询。因而connect by LEVEL prior一般都一同呈现。

最终再次附上针对原始的事务需求的完好的句子及输出:

select
regexp_substr(tech_class, '[^,]+', 1, LEVEL) as class_name,
tech_name
from teacher
CONNECT BY LEVEL <= REGEXP_COUNT(tech_class, '[^,]+')
and prior tech_class = tech_class
and prior sys_guid() is not null
order by class_name

image

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=537

标签: 数据库Oracle
分享给朋友:

“浅析REGEXP_SUBSTR,PRIOR,CONNECT BY” 的相关文章

数据库的根本操作

数据库的根本操作

title: 数据库的根本操作 date: 2024/12/9 updated: 2024/12/9 author: cmdragon excerpt: 数据库的根本操作是运用数据库办理体系(DBMS)履行数据存储和检索的中心行为。经过对数据库的创立、删去、查询、更新和删去等根本操作,用户能有效...

decipher数据库,疾病相关基因组结构变异的宝库

decipher数据库,疾病相关基因组结构变异的宝库

DECIPHER是一个交互式的网络数据库,专门用于存储和共享人类基因组变异和表型数据。以下是DECIPHER数据库的一些关键用途和特点: 用途1. 数据共享和比较:DECIPHER被临床社区广泛用于共享和比较表型及基因型数据。该数据库包含来自49,745名患者的数据,这些患者同意广泛的数据共享。2....

oracle连接字符串, 前言

oracle连接字符串, 前言

1. JDBC连接字符串(用于Java应用程序): ``` jdbc:oracle:thin:@//:/ ``` 或者 ``` jdbc:oracle:thin:@:: ```2. SQLPlus连接字符串(用于命令行工具): ``` /@:: ``` 或...

大数据 统计,大数据时代的来临与统计学的变革

大数据 统计,大数据时代的来临与统计学的变革

大数据统计是大数据分析中的一个重要组成部分,它涉及到对大量数据集进行收集、处理、分析和解释,以提取有价值的信息和洞察。以下是大数据统计的一些关键方面:1. 数据收集:大数据统计的第一步是收集大量数据。这些数据可以来自各种来源,包括社交媒体、网站、传感器、交易记录等。2. 数据预处理:在分析之前,需要...

电影大数据,新时代影视产业的驱动力

电影大数据,新时代影视产业的驱动力

电影大数据在电影产业中的应用非常广泛,涵盖了从内容创作到观众分析、从市场营销到影院服务的多个方面。以下是关于电影大数据的一些关键点:1. 内容创作与宣发: 大数据可以帮助电影制作团队更好地了解观众喜好,从而在内容创作上做出更精准的决策。例如,通过对历史数据的分析,可以预测哪些类型的电影更受欢迎...

怪物猎人3g数据库,怪物猎人3G数据库——全面解析游戏攻略与技巧

怪物猎人3g数据库,怪物猎人3G数据库——全面解析游戏攻略与技巧

1. 游聚网怪物猎人3G中文Wiki: 该网站提供了全面的怪物猎人3G资料,包括武器、防具、任务、技能等详细信息。你可以通过以下链接访问:。2. 怪物猎人数据库(mh.arrowing.top): 这个网站提供了怪物猎人XX/GU的数据库,包括怪物、武器、防具、道具、技能、地图等各方位的...