视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据库递归查询
2020-11-09 08:22:54 责编:小采
文档


欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 今天工作看同事代码用到了start with...connect by prior,不知道什么意思,查询了一些资料,以下是比较好理解的。 Oracle中的select语句可以用start with...connect by prior子句实现递归查询,con

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

  今天工作看同事代码用到了start with...connect by prior,不知道什么意思,查询了一些资料,以下是比较好理解的。

  Oracle中的select语句可以用start with...connect by prior子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:

  select ... from

  where

  start with

  connect by ;

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

  :查询结果重起始根结点的限定条件。

  :连接条件

  数据组织结构如下图:

  数据库表结构如下:

  create table t2(

  root_id number,

  id number,

  name varchar(5),

  description varchar(10)

  );

  insert into t2(root_id,id,name,description) values(0,1,'a','aaa');

  insert into t2(root_id,id,name,description) values(1,2,'a1','aaa1');

  insert into t2(root_id,id,name,description) values(1,3,'a2','aaa2');

  insert into t2(root_id,id,name,description) values(0,4,'b','bbb');

  insert into t2(root_id,id,name,description) values(4,5,'b1','bbb1');

  insert into t2(root_id,id,name,description) values(4,6,'b2','bbb2');

  获取完整树:

  select * from t2 start with root_id = 0 connect by prior id = root_id;

  获取特定子树:

  select * from t2 start with id = 1 connect by prior id = root_id;

  select * from t2 start with id = 4 connect by prior id = root_id;

  如果connect by prior中的prior被省略,则查询将不进行深层递归。

  如:

  select * from t2 start with root_id = 0 connect by id = root_id;

  select * from t2 start with id = 1 connect by id = root_id;

  如:

下载本文
显示全文
专题