oracle level关键字

Oracle CONNECT BY 使用详解
本文详细介绍了 Oracle 数据库中 CONNECT BY 和 START WITH 子句的应用方法,通过具体案例展示了如何利用这些特性进行树状结构数据的查询。
level 和 connect by ,start with 合在一起,一般是用来实现递归(树)查询。
connect by 子句定义表中的数据是如何相互联系的 
start with 子句定义树查询的初始起点
 level 表示查询深度(level 表示递归的层次)

PRIOR 和 START WITH 关键字是可选项 

PRIORY 运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系, PRIOR

运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是 

自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。 START WITH 子句为 

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

条件的行作为根节点。 


《Oracle database 11g完全参考手册》十四章中的例子:
SQL> col Cow format a6;
SQL> col Bull format a6;
SQL> col Offspring format a30;
SQL> col  Sex format a3; 
SQL> select * from BREEDING order by Birthdate;

OFFSPRING       SEX COW  BULL BIRTHDATE
------------------------------ --- ------ ------ ------------
BETSY                          F   EVE    ADAM   02-1月 -00
POCO                           M   EVE    ADAM   15-7月 -00
GRETA                          F   EVE    BANDIT 12-3月 -01
MANDY                          F   EVE    POCO   22-8月 -02
CINDY                          F   EVE    POCO   09-2月 -03
NOVI                           F   BETSY  ADAM   30-3月 -03
GINNY                          F   BETSY  BANDIT 04-12月-03
DUKE                           M   MANDY  BANDIT 24-7月 -04
TEDDI                          F   BETSY  BANDIT 12-8月 -05
SUZY                           F   GINNY  DUKE   03-4月 -06
PAULA                          F   MANDY  POCO   21-12月-06

OFFSPRING       SEX COW  BULL BIRTHDATE
------------------------------ --- ------ ------ ------------
RUTH                           F   GINNY  DUKE   25-12月-06
DELLA                          F   SUZY   BANDIT 11-10月-08
ADAM       M
EVE       F
BANDIT       M

已选择16行。

以下三个查询可清楚地看出继承关系:
以母牛为线索,EVE处于最根的位置
SQL> select Cow,Bull,LPAD(' ',6*(Level-1))||Offspring As Offspring,Sex,Birthdate 
from BREEDING 
start with Offspring = 'EVE' 
connect by Cow = PRIOR Offspring;

COW    BULL   OFFSPRING     SEX BIRTHDATE
------ ------ ------------------------------ --- ------------
     EVE     F
EVE    ADAM         BETSY                    F   02-1月 -00
BETSY  BANDIT             GINNY              F   04-12月-03
GINNY  DUKE                     RUTH         F   25-12月-06
GINNY  DUKE                     SUZY         F   03-4月 -06
SUZY   BANDIT                         DELLA  F   11-10月-08
BETSY  ADAM               NOVI               F   30-3月 -03
BETSY  BANDIT             TEDDI              F   12-8月 -05
EVE    POCO         CINDY                    F   09-2月 -03
EVE    BANDIT       GRETA                    F   12-3月 -01
EVE    POCO         MANDY                    F   22-8月 -02

COW    BULL   OFFSPRING     SEX BIRTHDATE
------ ------ ------------------------------ --- ------------
MANDY  BANDIT             DUKE               M   24-7月 -04
MANDY  POCO               PAULA              F   21-12月-06
EVE    ADAM         POCO                     M   15-7月 -00

已选择14行。
以公牛为线索,BANDIT和BETSY处于根的位置,它们两者没有继承关系

SQL> select Cow,Bull,LPAD(' ',6*(Level-1))||Offspring As Offspring,Sex,Birthdate from BREEDING start with Offspring = 'BANDIT' connect by BULL = PRIOR Offspring;

COW    BULL   OFFSPRING     SEX BIRTHDATE
------ ------ ------------------------------ --- ------------
     BANDIT     M
SUZY   BANDIT       DELLA                    F   11-10月-08
MANDY  BANDIT       DUKE                     M   24-7月 -04
GINNY  DUKE               RUTH               F   25-12月-06
GINNY  DUKE               SUZY               F   03-4月 -06
BETSY  BANDIT       GINNY                    F   04-12月-03
EVE    BANDIT       GRETA                    F   12-3月 -01
BETSY  BANDIT       TEDDI                    F   12-8月 -05

已选择8行。
SQL> select Cow,Bull,LPAD(' ',6*(Level-1))||Offspring As Offspring,Sex,Birthdate from BREEDING start with Offspring = 'BETSY' connect by Cow = PRIOR Offspring;

COW    BULL   OFFSPRING     SEX BIRTHDATE
------ ------ ------------------------------ --- ------------
EVE    ADAM   BETSY                          F   02-1月 -00
BETSY  BANDIT       GINNY                    F   04-12月-03
GINNY  DUKE               RUTH               F   25-12月-06
GINNY  DUKE               SUZY               F   03-4月 -06
SUZY   BANDIT                   DELLA        F   11-10月-08
BETSY  ADAM         NOVI                     F   30-3月 -03
BETSY  BANDIT       TEDDI                    F   12-8月 -05

已选择7行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值