关键字:
KingbaseES、Oracle、层次查询、迁移
一、层次查询
层次查询是一种特定类型的查询,用于在基于父子关系的数据中以层次顺序返回结果集中的记录。通常,层次是用一个反转顺序的树结构表示。树由相互连接的节点组成。每个节点可能会连接0个或多个子节点。在层次查询中,结果集的记录为一或多棵树中的节点。
语法:
SELECT ... FROM
[WHERE condition] --过滤某些节点
[ START WITH [nocycle] start_condition] --定义查询的起点, 可以使用子查询
CONNECT BY [[nocycle] PRIOR COLUMN1 = COLUMN2 [AND ...]]; --定义父子关系
order [ sibilings ] by ...
KingbaseES和Oracle均支持层次查询,且二者兼容。
下表列出了层次查询中的操作符:
伪列与普通列十分相似,但其值并不是和表数据存储在一起的。层次查询具有三个伪列,具体如下表所示。
二、测试案例
2.1 测试用表
图2-1 测试用表数据信息
emp表树状数据结构图:
2.2 在Oracle和KingbaseES 中层次查询
2.2.1 Oracle层次查询案例
基本的层次查询,显示员工(empno)和部门经理(mgr)之间的层次关系。
图2-2 Oracle 层次查询案例1
层次查询伪列的示例。通过对伪列LEVEL值执行LPAD操作,雇员名称被缩进,这样能够进一步强调每条记录在层次中的深度。
图2-3 Oracle 层次查询案例2
层次查询的WHERE过滤的示例。
图2-4 Oracle 层次查询案例3
2.2.2 KingbaseES中层次查询案例
基本的层次查询,显示员工(empno)和部门经理(mgr)之间的层次关系。
图2-5 KingbaseES 层次查询案例1
层次查询伪列的示例。通过对伪列LEVEL值执行LPAD操作,雇员名称被缩进,这样能够进一步强调每条记录在层次中的深度。
图2-6 KingbaseES 层次查询案例2
层次查询的WHERE过滤的示例。
图2-7 KingbaseES 层次查询案例3
- 总结
通过以上案例可以获知,对于Oracle的层次查询的语法,在KingbaseES V8R6的环境下已经具备了很好的兼容性,基本上在Oracle数据库上执行的层次查询语句,迁移到KingbaseES V8R6的环境时,可以不做改写,即可以运行。