`
zengshaotao
  • 浏览: 779731 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DB2的递归查询

 
阅读更多
CREATE
    TABLE FAMILY
    (
        PERSON_ID INTEGER,
        NAME VARCHAR(50),
        AGE INTEGER,
        GENDER CHARACTER(1),
        PARENT_ID INTEGER
    )

 

insert into FAMILY (PERSON_ID, NAME, AGE, GENDER, PARENT_ID) values 
(1, 'Apple', 10, 'F', 10),
(2, 'Zoe', 11, 'F', 3),
(3, 'John', 30, 'M', 13),
(4, 'Mary', 25, 'F', 24),
(5, 'Peter', 14, 'M', 4),
(6, 'Jenny', 13, 'F', 4),
(24, 'Robert', 60, 'M', 30);

查询Jenny的祖先

WITH temptab (person_id, name, parent_id, LEVEL) AS          
     (SELECT person_id, name, parent_id, 0               
        FROM FAMILY
       WHERE name = 'Jenny'
 
      UNION ALL                                      
 
      SELECT SUPER.person_id, SUPER.name, SUPER.parent_id, CHILD.LEVEL+1         
        FROM FAMILY SUPER, temptab CHILD
       WHERE SUPER.person_id = CHILD.parent_id
 
) SELECT * FROM temptab                               

查询Robert的子孙

WITH temptab (person_id, name, parent_id, level) AS          
     (SELECT person_id, name, parent_id, 0               
        FROM FAMILY
       WHERE name = 'Robert'
 
      UNION ALL                                      
 
      SELECT CHILD.person_id, CHILD.name, CHILD.parent_id, SUPER.LEVEL+1         
        FROM FAMILY CHILD, temptab SUPER
       WHERE SUPER.person_id = CHILD.parent_id AND level < 2
 
) SELECT * FROM temptab WHERE LEVEL<>0
分享到:
评论

相关推荐

    在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