/** * connect by主要用于父子,祖孙,上下级等层级关系的查询 { CONNECT BY [ NOCYCLE ] condition [AND condition]... [ START WITH condition ] | START WITH condition CONNECT BY [ NOCYCLE ] condition [AND condition]...} 解释: start with: 指定起始节点的条件 connect by: 指定父子行的条件关系 --PIROR ID = PARENT_ID,我是这样理解的,当前条(也是上一条)的ID等于下一条的PARENT ID。 prior: 查询父行的限定符,格式: prior column1 = column2 or column1 = prior column2 and ...(prior指上一行的指定字段值等于当前行的指定字段值) nocycle: 若数据表中存在循环行,那么不添加此关键字会报错,添加关键字后,便不会报错,但循环的两行只会显示其中的第一条 循环行: 该行只有一个子行,而且子行又是该行的祖先行 connect_by_iscycle: 前置条件:在使用了nocycle之后才能使用此关键字,用于表示是否是循环行,0表示否,1 表示是 connect_by_isleaf: 是否是叶子节点,0表示否,1 表示是 level: level伪列,表示层级,值越小层级越高,level=1为层级最高节点 */ --1.创建表 drop table employee; create table employee( emp_id number(18), lead_id number(18), emp_name varchar2(200), salary number(10,2), dept_no varchar2(8) ); -- 添加数据 insert into employee values('1',0,'king','1000000.00','001'); insert into employee values('2',1,'jack','50500.00','002'); insert into employee values('3',1,'arise','60000.00','003'); insert into employee values('4',2,'scott','30000.00','002'); insert into employee values('5',2,'tiger','25000.00','002'); insert into employee values('6',3,'wudde','23000.00','003'); insert into employee values('7',3,'joker','21000.00','003'); commit; --查询以emp_id为0开始的节点的所有直属节点 SELECT emp_id, lead_id, emp_name, PRIOR emp_name AS lead_name, salary FROM employee START WITH lead_id = 0 CONNECT BY PRIOR emp_id = lead_id; /** level伪列的使用,格式化层级 connect_by_root 查找根节点 connect_by_isleaf 是否是叶子节点 SYS_CONNECT_BY_PATH 层次结构显示 */ SELECT CONNECT_BY_ROOT(emp_name) root_emp_name, CONNECT_BY_ROOT(emp_id) root_emp_id, SYS_CONNECT_BY_PATH(emp_name, '/'),--层次结构显示 lpad( ' ', level * 2, ' ' ) || emp_name AS emp_name, lead_id, salary, CONNECT_BY_ISLEAF FROM employee WHERE dept_no = '002' START WITH lead_id = 1 CONNECT BY NOCYCLE PRIOR emp_id = lead_id; --插入一条数据,与另一条emp_id=7的数据组成循环行 insert into employee values('3',7,'joker_cycle','21000.00','003'); commit; -- connect_by_iscycle("CYCLE"), connect by nocycle --若数据表中存在循环行,那么不添加此关键字会报错,添加关键字后,便不会报错,但循环的两行只会显示其中的第一条 SELECT emp_id, emp_name, lead_id, salary, CONNECT_BY_ISCYCLE AS cycle FROM employee start with lead_id=0 CONNECT BY NOCYCLE PRIOR emp_id = lead_id;
相关推荐
Oracle start with.connect by prior子句实现递归查询
oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的
select 1 from 表格 start with … connect by prior id = pId start with:表示以什么为根节点,不加限制可以写1=1,要以id为123的节点为根节点,就写为start with id =123 connect by:connect by是必须的,...
oracle中的数查询,介绍的详细,有例子。
ORACLE查询树型关系(connect_by_prior_start_with)
NULL 博文链接:https://yunqiang-zhang-hotmail-com.iteye.com/blog/1312354
Oracle 递归查询, start with connect by prior 用法 find_in_set 函数 concat,concat_ws,group_concat 函数 MySQL 自定义函数 手动实现 MySQL 递归查询 Oracle 递归查询 在 Oracle 中是通过 start ...
Oracle_start_with_connect_by_prior_用法[文].pdf
Oracle row_number()over start with...connect by prior start with...connect by prior
。。。
。。。
oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询
Oracle使用递归查询。查询树结构的sql。在Oracle中,递归查询要用到start with ……connect by prior……
Oracle SELECT语句中的START WITH和CONNECT BY...START WITH子句指定被认为是层次起点,或“根”的一行或几行,然后CONNECT BY PRIOR子句指明哪些行彼此关联。本文将为大家介绍如何在Oracle层次查询中给SIBLINGS排序。
介绍了将多行转为字符串的三种方案,并比较了三种方案的执行效率. 1.sys_connect_by_path + start with ... connect by ... prior + 分析函数 2.自定义Function/SP 3.使用 Oracle 10g 内置函数 wmsys.wm_concat
select * from table1 c start with c.p_id='0000000' connect by prior c.id=c.p_id and c.use_yn='Y' order by id ; 2. 查询节点中所有的层级关系 SELECT RPAD( ' ', 2*(LEVEL-1), '-' ) || DEPNAME "DEPNAME",...
在使用start with connect by prior进行树型查询时,若是需要对数据进行过滤时,其过滤条件的位置需要慎重考虑。过滤条件的位置会对查询结果造成不同的影响。
oracle中的select语句可以用START WITH…CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: 代码如下:select * from tablename start with cond1 connect by cond2 where cond3;...
格式: SELECT column FROM table_name START WITH column=value CONNECT BY PRIOR 父主键=子外键 select lpad(‘ ‘,4*(level-1))||name name,job,id,super from emp start with super is null connect by prior id...