`
wkcause
  • 浏览: 13740 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

DB2递归查询

 
阅读更多

 

    递归 SQL 在 DB2 中通过公共表表达式 (CTE,Common Table Expression) 来实现。递归 SQL 由递归 CTE 以及对递归 CTE 结果的查询组成。那什么是递归 CTE 呢?简言之,如果 CTE 中的 FULLSELECT 在 FROM 子句中引用到 CTE 本身,就是递归 CTE。递归 CTE 包含以下三个组成部分:

  • 初始查询

    初始查询是 CTE 中对基本表进行查询的部分。CTE 定义中的第一个 FULLSELECT 必须不包含对 CTE 自身的应用,即必须是初始查询。

  • 递归查询

    递归查询就是通过对 CTE 自身的引用,从而启动递归逻辑的查询。递归查询需要遵循以下几个规则 :

    1. 递归查询和初始查询结果必须包含相同数量的数据列;
    2. 递归查询和初始查询结果数据列的、长度等必须一致;
    3. 递归查询不能包含 GROUP BY 或者 HAVING 子句;
    4. 递归查询不能包含 Outer Join;
    5. 递归查询不能包含子查询 (Subquery);
    6. 递归查询必须用 UNION ALL 联结。

     

  • 终止条件

    终止条件通常是隐性的,即如果前一次递归查询返回的结果集为空,则终止递归;但是也可以在递归查询中设定终止条件,如限定递归查询的深度等。

如有一张表:

 

CREATE TABLE NODE( 
  ID INTEGER NOT NULL, 
  PARENT_ID INTEGER NOT NULL);

查询SQL:

 

 

WITH temp(id,parent_id,level) 
 AS 
 ( 
 SELECT id,parent_id,0
 FROM node 
 WHERE parent_id = 0 
  UNION ALL 
 SELECT b.id,b.parent_id,a.level+1
 FROM temp a,node b 
 WHERE b.id= a.parent_id
 ) 
 SELECT * FROM temp;

其中红色部分是出师数据的查询条件,其中蓝色部分是查询出来数据的级别。

 

可参考:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1010liush/#ibm-pcon

 

 

 

 

 

分享到:
评论

相关推荐

    在db2和oracle中的对树的递归查询语句

    DB2虽然没有直接提供类似Oracle的`CONNECT_BY`功能,但可以通过自连接和临时表的方式来实现递归查询。一个典型的例子是使用`WITH RECURSIVE`子句: ```sql WITH RECURSIVE employee_tree (level, employee_id, ...

    DB2递归.docx

    以下是对DB2递归SQL的详细解释: 1. **递归查询的基本结构** - **初始查询**:这是CTE中对基础表进行查询的部分,不引用CTE本身,用于获取递归的起点。 - **递归查询**:在FROM子句中引用CTE,形成递归。递归查询...

    DB2循环递归实例很有用的

    ### DB2循环递归查询详解 #### 一、引言 在数据库操作中,经常会遇到需要处理层次结构数据的情况,例如组织结构、产品分类等。这些数据的特点是具有明显的层级关系,而传统的SQL查询往往难以高效地处理这类问题。...

    将 CONNECT BY 移植到 DB2

    通过以上示例,我们可以看到虽然 Oracle 和 DB2 在处理递归查询时采用了不同的方法,但通过适当的转换和调整,可以在 DB2 中实现与 Oracle 类似的功能。对于从 Oracle 迁移到 DB2 的应用而言,掌握这两种不同的递归...

    DB2 UDB AS400版数据性能和查询优化

    ### DB2 UDB AS400版数据性能和查询优化 #### 一、概述 DB2 UDB(Universal Database)是IBM开发的一款关系型数据库管理系统,适用于多种平台,包括AS/400系统。本文档主要针对DB2 UDB在AS/400上的应用,重点介绍...

    db2-731考题答案

    8. **SQL增强**:DB2 v9增强了SQL支持,包括窗口函数、递归查询和自定义聚合函数,使得SQL编程更加灵活和强大。 9. **Java和.NET支持**:DB2 v9提供了对Java和.NET环境的全面支持,包括JDBC和.NET数据提供者,使得...

    db2迁移到mysql.docx

    在MySQL中,可以通过递归查询或者使用自定义函数来实现类似的功能。 ##### 5.1. 根据传入ID查询所有父节点的ID ```sql SELECT * FROM treenodes WHERE FIND_IN_SET(id, F_GET_TREE_PARENT_LIST('treenodes', '15'));...

    db2 存储过程语法与实例

    DB2支持在存储过程中嵌套其他存储过程,也可以创建递归存储过程,用于解决层次结构问题或自引用逻辑。 7. **动态SQL** 存储过程可以包含动态SQL,这使得在运行时能够构建和执行SQL语句,增加灵活性。 8. **游标...

    db2认证730-731练习

    1. 高级SQL:理解子查询、窗口函数、递归查询和存储过程等高级SQL特性。 2. 性能优化:学习如何通过调整索引、统计信息和查询计划来提升查询性能。 3. 数据库设计:探讨ER模型、范式理论以及如何进行物理数据库设计...

    DB2学习记录

    Oracle数据库实现了许多非标准的SQL方言和扩展特性,如`CONNECT BY`递归查询、`(+)`外连接操作符、`DUAL`表、`ROWNUM`伪列、`ROWID`伪列以及`MINUS`操作符等。这些特性在Oracle中非常常用,但在DB2中则不支持。然而...

    CF12 DB2 SQL Workshop

    最后的单元将介绍一些高级SQL特性,如窗口函数(Window Functions)用于计算行间差异和排名,递归查询(Recursive Queries)用于处理层次结构数据,以及XML支持和JSON集成,适应现代数据处理需求。 通过《CF12 DB2 ...

    DB2兼容模式设置文档

    - **递归查询验证**:使用`CONNECT BY`语法(在DB2中使用其他方法)验证递归查询。 - **左连接验证**:通过创建两个表并进行左连接操作来验证。 - **DUAL表验证**:在DB2中创建一个名为`DUAL`的空表并查询。 - *...

    DB2 Version 9.1 for zOS What’s New

    新版本增强了SQL一致性,提供了更多符合SQL标准的功能,如窗口函数、递归查询等,这不仅提升了SQL查询的能力,还加强了与其他数据库系统的互操作性。 四、SQL一致性改进 在SQL一致性方面,DB2 V9.1 for z/OS做出了...

    ORACLE转DB2对照全解

    **注意:** Oracle提供了`CONNECT BY`语法来实现层次查询,而DB2则通过递归公共表表达式(CTE)来实现。 #### 九、打印输出信息 **Oracle:** ```sql DBMS_OUTPUT.PUT_LINE('Hello World'); ``` **DB2:** ```sql ...

    Oracle 11GR2的递归WITH子查询方法

    与其他数据库系统(如DB2、Firebird、Microsoft SQL Server、PostgreSQL)相比,虽然Oracle较晚引入递归WITH子查询,但它仍然是一个强大的补充,特别适用于处理需要递归操作的数据。理解并掌握这一特性,对于优化...

    db2培训文档,语法、函数、存储过程、实例、聚集、递归等

    ### DB2培训文档知识点概述 #### 一、SQL简介 SQL(Structured Query Language)是一种用于管理关系数据库的标准语言。它不仅被广泛应用于各种数据库系统中,而且是DB2数据库管理系统的核心组成部分之一。通过SQL,...

Global site tag (gtag.js) - Google Analytics