`
2007yn
  • 浏览: 44314 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

DB2 递归查询

阅读更多

  表的结构是  
  origin     destination   distance  
  ---------------------------------------  
  Germany     New York     8000  
  Germany     Chicago     8700  
  Chicago               Austin                1300  
  New York             Houston            2100  
  Houston              Austin                300  
  New York            Chicago              950  
  Italy                    New York           10000  
  Ireland               Chicago              10700  
  Chicago              Toronto              400  
  New York            Toronto              350  
  Mexico                Houston             770  
   
  SQL语句是  
  WITH   path   (origin,   destination,   distance,  stops)  
  AS(  
        SELECT   origin,   destination,   distance,  0    
        FROM     flights 
        WHERE    origin='Germany'  
  UNION   ALL  
        SELECT   p.origin, f.destination, p.distance+f.distance,   p.stops+1  
        FROM     flights   f,   path   p  
        WHERE    p.destination=f.origin)  
   
  SELECT   origin,   destination,   distance,   stops   FROM   path    
   
  结果是  
  origin     destinat    distance             stops  
  -----------------------------------------------------------  
  Germany     New York    8000                   0  
  Germany     Chicago    8700                   0  
  Germany             Houston            10100                 1  
  Germany             Chicago             8950                   1  
  Germany             Toronto             8350                   1  
  Germany             Austin               10000                  1  
  Germany             Toronto             9100                   1  
  Germany             Austin               10400                  2  
  Germany             Austin               10250                  2  
  Germany            Toronto              9350                   2 


第一次执行结果:  
          第一个select语句产生的结果为  
          path:        origin                destination                 distance               stops  
                           Germany               New   York                  8000                   0  
                           Germany               Chicago                     8700                   0  
          第二个select语句执行的结果为      
          path:         origin                destination                 distance               stops  
                        Germany               Hunston                     8000+2100             1  
                        Germany               Chicago                     8000+950               1  
                        Germany               Toronto                     8000+350               1  
                        Germany               Austin                      8700+1300              1  
                        Germany               Toronto                     8700+400               1  
          union   后的结果为:  
          path:        origin                destination                 distance               stops  
                        Germany               New   York                  8000                      0  
                        Germany               Chicago                     8700                       0  
                        Germany               Hunston                     8000+2100            1  
                        Germany               Chicago                     8000+950               1  
                        Germany               Toronto                     8000+350               1  
                        Germany               Austin                      8700+1300               1  
                        Germany               Toronto                     8700+400               1  
   
  第二次递归调用结果:(path发生了改变,重新执行第二个select子句)  
          path:        origin                destination                 distance               stops  
                        Germany               New   York                  8000                        0  
                        Germany               Chicago                     8700                         0  
                        Germany               Hunston                     8000+2100              1  
                        Germany               Chicago                     8000+950                 1  
                        Germany               Toronto                     8000+350                  1  
                        Germany               Austin                      8700+1300                 1  
                        Germany               Toronto                     8700+400                  1  
                        Germany               Austin                      8700+2100+300          2  
                        Germany               Austin                      8000+950+1300          2  
                        Germany               Toronto                     8000+950+400          2 

分享到:
评论

相关推荐

    在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递归实现是指在DB2数据库管理系统中实现递归查询的方法。递归查询是一种复杂的查询类型,它可以将结果集与自身进行比较和计算,从而实现复杂的业务逻辑。在Oracle数据库中,有一个专门的语句叫做CONNECT BY,它...

    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