表的结构是
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的`CONNECT_BY`功能,但可以通过自连接和临时表的方式来实现递归查询。一个典型的例子是使用`WITH RECURSIVE`子句: ```sql WITH RECURSIVE employee_tree (level, employee_id, ...
以下是对DB2递归SQL的详细解释: 1. **递归查询的基本结构** - **初始查询**:这是CTE中对基础表进行查询的部分,不引用CTE本身,用于获取递归的起点。 - **递归查询**:在FROM子句中引用CTE,形成递归。递归查询...
DB2递归实现是指在DB2数据库管理系统中实现递归查询的方法。递归查询是一种复杂的查询类型,它可以将结果集与自身进行比较和计算,从而实现复杂的业务逻辑。在Oracle数据库中,有一个专门的语句叫做CONNECT BY,它...
### DB2循环递归查询详解 #### 一、引言 在数据库操作中,经常会遇到需要处理层次结构数据的情况,例如组织结构、产品分类等。这些数据的特点是具有明显的层级关系,而传统的SQL查询往往难以高效地处理这类问题。...
通过以上示例,我们可以看到虽然 Oracle 和 DB2 在处理递归查询时采用了不同的方法,但通过适当的转换和调整,可以在 DB2 中实现与 Oracle 类似的功能。对于从 Oracle 迁移到 DB2 的应用而言,掌握这两种不同的递归...
### DB2 UDB AS400版数据性能和查询优化 #### 一、概述 DB2 UDB(Universal Database)是IBM开发的一款关系型数据库管理系统,适用于多种平台,包括AS/400系统。本文档主要针对DB2 UDB在AS/400上的应用,重点介绍...
8. **SQL增强**:DB2 v9增强了SQL支持,包括窗口函数、递归查询和自定义聚合函数,使得SQL编程更加灵活和强大。 9. **Java和.NET支持**:DB2 v9提供了对Java和.NET环境的全面支持,包括JDBC和.NET数据提供者,使得...
在MySQL中,可以通过递归查询或者使用自定义函数来实现类似的功能。 ##### 5.1. 根据传入ID查询所有父节点的ID ```sql SELECT * FROM treenodes WHERE FIND_IN_SET(id, F_GET_TREE_PARENT_LIST('treenodes', '15'));...
DB2支持在存储过程中嵌套其他存储过程,也可以创建递归存储过程,用于解决层次结构问题或自引用逻辑。 7. **动态SQL** 存储过程可以包含动态SQL,这使得在运行时能够构建和执行SQL语句,增加灵活性。 8. **游标...
1. 高级SQL:理解子查询、窗口函数、递归查询和存储过程等高级SQL特性。 2. 性能优化:学习如何通过调整索引、统计信息和查询计划来提升查询性能。 3. 数据库设计:探讨ER模型、范式理论以及如何进行物理数据库设计...
Oracle数据库实现了许多非标准的SQL方言和扩展特性,如`CONNECT BY`递归查询、`(+)`外连接操作符、`DUAL`表、`ROWNUM`伪列、`ROWID`伪列以及`MINUS`操作符等。这些特性在Oracle中非常常用,但在DB2中则不支持。然而...
最后的单元将介绍一些高级SQL特性,如窗口函数(Window Functions)用于计算行间差异和排名,递归查询(Recursive Queries)用于处理层次结构数据,以及XML支持和JSON集成,适应现代数据处理需求。 通过《CF12 DB2 ...
- **递归查询验证**:使用`CONNECT BY`语法(在DB2中使用其他方法)验证递归查询。 - **左连接验证**:通过创建两个表并进行左连接操作来验证。 - **DUAL表验证**:在DB2中创建一个名为`DUAL`的空表并查询。 - *...
新版本增强了SQL一致性,提供了更多符合SQL标准的功能,如窗口函数、递归查询等,这不仅提升了SQL查询的能力,还加强了与其他数据库系统的互操作性。 四、SQL一致性改进 在SQL一致性方面,DB2 V9.1 for z/OS做出了...
**注意:** Oracle提供了`CONNECT BY`语法来实现层次查询,而DB2则通过递归公共表表达式(CTE)来实现。 #### 九、打印输出信息 **Oracle:** ```sql DBMS_OUTPUT.PUT_LINE('Hello World'); ``` **DB2:** ```sql ...
与其他数据库系统(如DB2、Firebird、Microsoft SQL Server、PostgreSQL)相比,虽然Oracle较晚引入递归WITH子查询,但它仍然是一个强大的补充,特别适用于处理需要递归操作的数据。理解并掌握这一特性,对于优化...
### DB2培训文档知识点概述 #### 一、SQL简介 SQL(Structured Query Language)是一种用于管理关系数据库的标准语言。它不仅被广泛应用于各种数据库系统中,而且是DB2数据库管理系统的核心组成部分之一。通过SQL,...