LightDB支持层次查询CONNECT BY
LightDB支持层次查询,兼容Oracle中的CONNECT BY语法。什么是层次查询呢?在关系数据库中,表中的记录之间有时是有层次关系的,例如员工分为管理者与被管理者,机构分为上级与下级,家族成员分为长辈与晚辈等。其中最顶层的节点称为根节点,即层次级别为1的节点,除了根节点,其他节点都是子节点。对此,LightDB数据库提供了一种层次查询方法,又称树形查询,能够将一个表中的数据按照记录之间的关系以树状结构的形式显示。
语法说明
connect by 语法如下:
SELECT ...
FROM ....
START WITH cond1
CONNECT BY cond2
WHERE cond3;
说明:
(1)START WITH:表示从哪个节点开始查找,也就是通过cond1查询到的数据,作为后续查询的起始节点(参数),可以是一个或多个根节点;如果省略Start With,就把整个表中的数据从头到尾遍历一次,每一个数据做一次根,然后遍历树中的其他节点信息;
(2)CONNECT BY子句说明每行数据将是按照层次顺序检索,cond2是连接条件,一般包含PRIOR,如果PRIOR在子节点之前,表示向下查找,如果PRIOR在父节点之前,表示向上查找;如果不带PRIOR,则只显示当前记录;
(3)WHERE:这里的条件判断用于在最后查询出结果列表之后再进行条件筛选。
示例如下:
--建表
create table area(id int, name text, pid int);
-- 造数据
insert into area values(1, 'china', 0);
insert into area values(101, 'zhejiang', 1);
insert into area values(102, 'jiangsu', 1);
insert into area values(103, 'heilongjiang', 1);
insert into area values(10101, 'hangzhou', 101);
insert into area values(10102, 'ningbo', 101);
insert into area values(10103, 'shaoxing', 101);
insert into area values(10104, 'wenzhou', 101);
insert into area values(1010101, 'binjiang', 10101);
insert into area values(1010102, 'shangcheng', 10101);
insert into area values(1010103, 'xihu', 10101);
insert into area values(1010101, 'gongshu', 10101);
造好数据后,我们通过几个例子说明connect by是如何使用的。
-- 我们查一下杭州市下辖的区有哪些:
postgres@postgres=# select *,level from area start with name='hangzhou' connect by prior id = pid;id | name | pid | LEVEL
---------+------------+-------+-------10101 | hangzhou | 101 | 11010101 | binjiang | 10101 | 21010102 | shangcheng | 10101 | 21010103 | xihu | 10101 | 21010101 | gongshu | 10101 | 2
(5 rows)-- 我们倒过来,查一下杭州市属于哪里
postgres@postgres=# select *,level from area start with name='hangzhou' connect by prior pid = id;id | name | pid | LEVEL
-------+----------+-----+-------10101 | hangzhou | 101 | 1101 | zhejiang | 1 | 21 | china | 0 | 3
(3 rows)
更多请参考LightDB官网:https://www.hs.net/lightdb
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!