一、基础
创建数据表:
二、查询格式及描述
3)、使用LEVEL
若把级联查询数据看作一颗树,在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2, 依此类推。
创建数据表:
-- 区域表
CREATE TABLE sys_district{
id NUMBER(10) NOT NULL primary key,
parentid NUMBER(10),
name VARCHAR2(255 BYTE) NOT NULL
}
向区域表中插入数据:
INSERT INTO sys_district(ID,NAME) VALUES(1,'中国');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(2,1,'贵州');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(3,1,'四川');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(4,2,'遵义');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(5,2,'贵阳');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(6,3,'宜宾');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(7,3,'成都');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(8,4,'道真仡佬族苗族自治县');
INSERT INTO sys_district(ID,PARENTID,NAME) VALUES(9,6,'高县');
二、查询格式及描述
1、查询格式
SELECT [要查询显示的列] FROM [表名] [WHERE条件语句] [[START WITH [起始查询条件] CONNECT BY [级联关系]] 或 [CONNECT BY [级联关系] START WITH [起始查询条件]]]
2、描述
1)、WHERE条件语句
可缺省,若存在,则级联查询完成后再执行WHERE条件查询。作用可用于对级联查询数据进行筛选。
2)、[级联关系] 如下所示:
PRIOR [id1] = [id2]:以前面已查询数据的id1去关联后面需查询数据的id2进行级联查询。所以,PRIOR [id] = [parentid]表示用前面已查询数据的id字段数据(作为条件参数)去关联表中parentid字段进行查询,即向下级联查询;PRIOR [parentid] = [id]表示用前面已查询数据的parentid字段数据(作为条件参数)去关联表中的id字段进行查询,即向上级联查询。[id1] = PRIOR [id2]:以前面已查询数据的id2去关联后面需查询数据的id1进行级联查询。所以,[id] = PRIOR [parentid]表示用前面已查询数据的parentid字段数据(作为条件参数)去关联表中的id字段进行查询,即向上级联查询;[parentid] = PRIOR [id]表示用前面已查询数据的id字段数据(作为条件参数)去关联表中parentid字段进行查询,即向下级联查询。
由上述可知,级联查询条件和等号前后放置字段顺序无关,而和PRIOR关键字标记有关。3)、使用LEVEL
若把级联查询数据看作一颗树,在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2, 依此类推。
SELECT ID,NAME,PARENTID,LEVEL FORM SYS_DISTRICT START WITH ID = 1 CONNECT BY PRIOR ID = PARENTID;