首页 数据库 mysql教程 oracle 递归查询-个人总结

oracle 递归查询-个人总结

Jun 07, 2016 pm 03:18 PM
c leo oracle 个人 总结 查询 递归 首先

首先,建表: create table T_TEST_WORD( id NUMBER, pid VARCHAR2(20), name VARCHAR2(20)) 插入数据: insert into T_TEST_WORD (id, pid, name)values (1, '-1', '中国');insert into T_TEST_WORD (id, pid, name)values (2, '1', '江苏');insert into T_

首先,建表:

create table T_TEST_WORD
(
  id   NUMBER,
  pid  VARCHAR2(20),
  name VARCHAR2(20)
)
登录后复制


插入数据:


insert into T_TEST_WORD (id, pid, name)
values (1, '-1', '中国');
insert into T_TEST_WORD (id, pid, name)
values (2, '1', '江苏');
insert into T_TEST_WORD (id, pid, name)
values (3, '1', '浙江');
insert into T_TEST_WORD (id, pid, name)
values (4, '2', '南京');
insert into T_TEST_WORD (id, pid, name)
values (5, '2', '无锡');
insert into T_TEST_WORD (id, pid, name)
values (6, '1', '安徽');
insert into T_TEST_WORD (id, pid, name)
values (7, '4', '雨花台区');
insert into T_TEST_WORD (id, pid, name)
values (8, '-1', '美国');
insert into T_TEST_WORD (id, pid, name)
values (9, '-1', '俄罗斯');
commit;
登录后复制

查询下表中的数据:

表1

oracle 递归查询-个人总结


其中PID为-1的代表根节点。


开始进行递归查询:

查询结果如下:

表2

oracle 递归查询-个人总结


说明:

select ... from tablename(表名)   where  条件1  start  with  条件2   connect  by  条件3  and  条件4 ...


看下这个语句(由根节点向子节点查询)


select  t.* , level  from T_TEST_WORD  t  start  with pid='-1'  connect  by  prior  id = pid(由根节点向子节点查询)


从T_TEST_WORD表中查询所有记录,从pid=-1的开始查询,且上一次查询记录的id作为本次查询的pid,以上表为例,举例如下:

第一次查询出pid=-1的记录是id为1的那条。

第二次查询时,查询pid=1的(上次查询记录的id是1)记录,可以查询到id为2的那条记录

第三次查询时,查询pid=2的(上次查询记录的id是2)记录,可以查询到id为4的那条记录,以此类推......

由上,查询到了表2的记录。


由树的根节点向子节点查询时,查询节点的顺序是按照树的前序遍历(DLR)进行的(1,2,4,7,5,3,6,8,9),如下图1

图1:

oracle 递归查询-个人总结

(比较丑的图,凑合看吧,嘻嘻)

注意:那个level要有start  with  ......  connect  by ......  才有效哦,不然会报错的。


再看这句(由子节点向根节点查询)

select t.* ,level from T_TEST_WORD t start with pid='2' connect by  id = prior pid
登录后复制

从pid=2的开始(向上)查询,且上一次查询记录的pid作为本次查询的id


oracle 递归查询-个人总结


prior挨着谁,就将谁作为本次查询的某某关键字,比如connect by  id = prior pid,就是将上次的pid作为本次查询的id。

注意,level是伪列,查询数据所对应的级,或者说深度吧。


小菜的总结,有问题请指出,谢谢咯!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

oracle数据库日志会保存多久 oracle数据库日志会保存多久 May 10, 2024 am 03:27 AM

Oracle 数据库日志的保留期限取决于日志类型和配置,包括:重做日志:由 "LOG_ARCHIVE_DEST" 参数配置的最大大小决定。归档重做日志:由 "DB_RECOVERY_FILE_DEST_SIZE" 参数配置的最大大小决定。在线重做日志:不归档,在数据库重启时丢失,保留期限与实例运行时间一致。审计日志:由 "AUDIT_TRAIL" 参数配置,默认保留 30 天。

oracle数据库启动步骤顺序为 oracle数据库启动步骤顺序为 May 10, 2024 am 01:48 AM

Oracle 数据库启动顺序为:1. 检查前置条件;2. 启动监听器;3. 启动数据库实例;4. 等待数据库打开;5. 连接到数据库;6. 验证数据库状态;7. 启用服务(如果需要);8. 测试连接。

oracle中某个字符出现的次数怎么看出来 oracle中某个字符出现的次数怎么看出来 May 09, 2024 pm 09:33 PM

要在 Oracle 中查找字符出现的次数,执行以下步骤:获取字符串的总长度;获取字符所在子字符串的长度;计算字符出现的次数:用总长度减去子字符串长度。

oracle需要多少内存 oracle需要多少内存 May 10, 2024 am 04:12 AM

Oracle 所需内存量取决于数据库大小、活动水平和所需性能水平:用于存储数据缓冲区、索引缓冲区、执行 SQL 语句和管理数据字典缓存。具体数量受数据库大小、活动水平和所需性能水平影响。最佳实践包括设置适当的 SGA 大小、调整 SGA 组件大小、使用 AMM 和监控内存使用情况。

oracle数据库服务器硬件配置要求 oracle数据库服务器硬件配置要求 May 10, 2024 am 04:00 AM

Oracle 数据库服务器硬件配置要求:处理器:多核,主频至少 2.5 GHz,大型数据库建议 32 核以上。内存:小型数据库至少 8GB,中等规模 16-64GB,大型数据库或高负载工作负载高达 512GB 或更多。存储:SSD 或 NVMe 磁盘,RAID 阵列提高冗余和性能。网络:高速网络(10GbE 或更高),专用网卡,低延迟网络。其他:稳定电源、冗余组件、兼容操作系统和软件、散热和冷却系统。

oracle定时任务每天都执行一次创建步骤 oracle定时任务每天都执行一次创建步骤 May 10, 2024 am 03:03 AM

要在 Oracle 中创建每天执行一次的定时任务,需要执行以下三个步骤:创建一个作业。为作业添加一个子作业,并设置其计划表达式为“INTERVAL 1 DAY”。启用作业。

用oracle数据库需要多大内存 用oracle数据库需要多大内存 May 10, 2024 am 03:42 AM

Oracle 数据库所需内存量取决于数据库大小、工作负载类型和并发用户数量。通常建议:小型数据库:16-32 GB,中型数据库:32-64 GB,大型数据库:64 GB 或更多。其他需考虑因素包括数据库版本、内存优化选项、虚拟化和最佳实践(监视内存使用情况、调整分配)。

oracle怎么读取dbf文件 oracle怎么读取dbf文件 May 10, 2024 am 01:27 AM

Oracle 可以通过以下步骤读取 dbf 文件:创建外部表,引用 dbf 文件;查询外部表,检索数据;将数据导入 Oracle 表。

See all articles