oracle connect by用法

先用scott用户下的emp表做实验.

emp表有个字段,一个是empno(员工编号),另一个是mgr(上级经理编号)

下面是表中所有数据

1

select * from emp start with empno=7698 connect by  mgr=prior empno;

执行结果如下:

得到的结果是empno=7698的数据,以及会得到mgr=7698的数据。

它是向下递归的, 即我们从empno=7698开始遍历,去找出mgr=7698的所有数据S(用S代表查出的所有数据.), 然后在从S中的empno的值去匹配查找是否还有满足,mgr in (s.empno)的数据。一直遍历进去到没有数据为止。

下面的这个可以详细的表述效果。

1

2

--向下递归遍历

select * from emp connect by mgr= prior empno start with empno=7839;

执行结果如下:

1

2

--向上递归遍历

select * from emp connect by prior mgr=empno start with empno=7844;

执行结果如下:

这样直到没有匹配的数据为止。

以上只是简单的举了个例子。

connect by是结构化查询中用到的,其基本语法是:

1

2

3

4

select ... from tablename

start by cond1

connect by cond2

where cond3

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段(如emp表中的empno和mgr字段):empno, mgr那么通过表示每一条记录的mgr是谁,就可以形成一个树状结构。

用上述语法的查询可以取得这棵树的所有记录。

其中:

cond1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

cond2是连接条件,其中用prior表示上一条记录,比如connect by prior id=praentid就是说上一条记录的id是本条记录的praentid,即本记录的父亲是上一条记录。

cond3是过滤条件,用于对返回的所有记录进行过滤。

prior和start with关键字是可选项

prior运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,prior运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。

start with子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。

时间: 2024-10-11 04:58:39

oracle connect by用法的相关文章

oracle connect by用法篇 (转)

1.基本语法 select * from table [start with condition1] connect by [prior] id=parentid 1 2 1 2 一般用来查找存在父子关系的数据,也就是树形结构的数据:其返还的数据也能够明确的区分出每一层的数据. start with condition1 是用来限制第一层的数据,或者叫根节点数据:以这部分数据为基础来查找第二层数据,然后以第二层数据查找第三层数据以此类推. connect by [prior] id=parent

oracle connect by用法篇

1.基本语法 select * from table [start with condition1] connect by [prior] id=parentid 一般用来查找存在父子关系的数据,也就是树形结构的数据:其返还的数据也能够明确的区分出每一层的数据. start with condition1 是用来限制第一层的数据,或者叫根节点数据:以这部分数据为基础来查找第二层数据,然后以第二层数据查找第三层数据以此类推. connect by [prior] id=parentid 这部分是用

oracle connect by 用法

Oracle中可以通过START WITH . . . CONNECT BY . . .子句来实现SQL的层次查询,即递归查询 例如: select level||'月' 月份 from dual connect by level < 13; 或者 select rownum||'月' 月份 from dual connect by rownum < 13; 可以递归查询出12个月 1    1月 2    2月 3    3月 4    4月 5    5月 6    6月 7    7月

IT忍者神龟之oracle connect by用法回顾

先用scott用户下的emp表做实验. emp表有个字段,一个是empno(员工编号),另一个是mgr(上级经理编号) 下面是表中所有数据 1 select * from emp start with empno=7698 connect by  mgr=prior empno; 执行结果如下: 得到的结果是empno=7698的数据,以及会得到mgr=7698的数据. 它是向下递归的, 即我们从empno=7698开始遍历,去找出mgr=7698的所有数据S(用S代表查出的所有数据.), 然后

[转]ORACLE的ProC用法讲解

pro*c是高级的用法,OCI是oracle的基础用法 如何编译.pc文件: proc code=cpp  parse=none iname=filename.pc oname=filename.cpp 一, 首先要包涵头文件#include 这个头文件 二,  在声明宿主变量之前一定要先定义struct sqlca sqlca;这个变量. 三, 所有与oracle数据库SQL语句有关的变量必须在前面声明为宿主变量分配空间才可以使用, 宿主变量只能是oracle支持的数据类型,一般是基本类型的,

Oracle “CONNECT BY” (层级递归查询)

Oracle "CONNECT BY"是层次查询子句,一般用于树状或者层次结果集的查询.其语法是: ? 1 2 [ START WITH condition ] CONNECT BY [ NOCYCLE ] condition The start with .. connect by clause can be used to select data that has a hierarchical relationship (usually some sort of parent-&g

oracle with as用法

with as语法 –针对一个别名 with tmp as (select * from tb_name) –针对多个别名 with    tmp as (select * from tb_name), tmp2 as (select * from tb_name2),    tmp3 as (select * from tb_name3),    … 1 2 3 4 5 6 7 8 9 --相当于建了个e临时表 with e as (select * from scott.emp e wher

Oracle CASE WHEN 用法介绍

Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASEWHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 2. CASE WHEN 在语句中不同位置的用法 2.1 SELECT CASE WHEN 用法 SELECT gra

Oracle %rowtype的用法

Oracle %rowtype的用法 编程语言 分享到: 专业回答 茗茶堂 2009-04-13 20:51 表示该类型为行数据类型,存储的是一行数据,一行数据里可以有多列,类似于表里的一行数据,也可以是游标里的一行数据,如:vs_row1 表%rowtype;vs_row2 游标%rowtype;