Oracle 中的树查询和 connect by

  • Oracle 中的树查询和 connect by 使用 connect by 和 start with 来建立类似于树的报表并不难,只要遵循以下基本原则即可: 使用 connect by 时各子句的顺序应为: select from where start with connect by order by
  • prior 使报表的顺序为从根到叶(如果 prior 列是父辈)或从叶到根(如果 prior 列是后代)。
  • where 子句可以从树中排除个体,但不排除它们的子孙(或者祖先,如果 prior 列是后代)。
  • connect by 中的条件(尤其是不等于)消除个体和它所有的子孙(或祖先,依赖于怎样跟踪树)。
  • connect by 不能与 where 子句中的表连接在一起使用。

下面是几个例子

1. 从根到叶遍历 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL START WITH n_id = 0 CONNECT BY n_parendid = PRIOR n_id; 2. 从叶到根遍历 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL START WITH n_id = 300 CONNECT BY n_id = PRIOR n_parendid; 3. 排除个体,但不排除它们的子孙 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL AND n_id != 2 START WITH n_id = 0 CONNECT BY n_parendid = PRIOR n_id; 4. 消除个体和它所有的子孙 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL START WITH n_id = 0 CONNECT BY n_parendid = PRIOR n_id AND n_id != 2; 5. 改变显示顺序 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL START WITH n_id = 0 CONNECT BY n_parendid = PRIOR n_id ORDER BY n_viewnum DESC;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

Mysql Insert Or Update语法实例

有的时候会需要写一段insert的sql,如果主键存在,则update;如果主键不存在,则insert。Mysql中提供了这样的用法:ON DUPLICATE...

1857
来自专栏数据和云

【动手实践】Oracle 12.2 新特性:只读分区的使用和维护

在12.2的分区新特性中引入了只读分区的特性,可以帮助我们将某些分区的数据进行静态化保护。 这一特性通过将表或者分区设置为READ ONLY或者READ WRI...

2737
来自专栏xingoo, 一个梦想做发明家的程序员

Mysql Insert Or Update语法例子

有的时候会需要写一段insert的sql,如果主键存在,则update;如果主键不存在,则insert。Mysql中提供了这样的用法:ON DUPLICATE...

21910
来自专栏杨建荣的学习笔记

基于DB time的调优分析 (r6笔记第79天)

继昨天使用DB time能够快速灵活的定位sql语句之后,发现分析问题更快捷,高效了。今天就牛刀小试,把一个数据库从500%的负载调到不到100%的负载。前提是...

2834
来自专栏沃趣科技

SQL优化案例-改变那些CBO无能为力的执行计划

用户写的sql,Oracle会进行等价改写,即使是RBO优化模式,Oracle也会给你做一些转换,这些转化都是基于一种固定的算法,oracle称这种转换是“启发...

3617
来自专栏idba

MySQL 各种SQL语句加锁分析

Locking read( SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE),UPDATE以及DE...

722
来自专栏杨建荣的学习笔记

MySQL 5.6,5.7的优化器对于count(*)的处理方式

最近看了很多阿里同学的MySQL文章,阿里内核同学的文章一言不合就上代码,不光让我们看到了结果,还能有代码可读,如果碰到了类似的问题,这样的解读确实是很难...

3376
来自专栏Java爬坑系列

【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一 Adjacency List)

  今天来看看一个比较头疼的问题,如何在数据库中存储树形结构呢?   像mysql这样的关系型数据库,比较适合存储一些类似表格的扁平化数据,但是遇到像树形结构这...

2148
来自专栏MYSQL轻松学

insert事务产生duplicate key error引发的死锁分析

先看程序报错: 2017-06-12 21:18:40.856 [ForkJoinPool.commonPool-worker-12] ERROR com....

3954
来自专栏乐沙弥的世界

Oracle 重建索引脚本

      索引是提高数据库查询性能的有力武器。没有索引,就好比图书馆没有图书标签一样,找一本书自己想要的书比登天还难。然而索引在使用的过程中,尤其是在批量的D...

601

扫码关注云+社区