`
a25765339
  • 浏览: 62588 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DB2 递归 SQL 的语法

 
阅读更多
递归 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( 
  CHILD INTEGER NOT NULL, 
  PARENT INTEGER NOT NULL); 

 INSERT INTO NODE VALUES(1, 0); 
 INSERT INTO NODE VALUES(2, 6); 
 INSERT INTO NODE VALUES(3, 1); 
 INSERT INTO NODE VALUES(4, 5); 
 INSERT INTO NODE VALUES(5, 3); 
 INSERT INTO NODE VALUES(6, 3); 
 INSERT INTO NODE VALUES(7, 5); 
 INSERT INTO NODE VALUES(8, 5); 


WITH report(parent, child) 
 AS 
 ( 
 SELECT parent, child 
 FROM node 
 WHERE parent = 0 
  UNION ALL 
 SELECT b.parent, b.child 
 FROM report a, node b 
 WHERE b.parent = a.child 
 ) 
 SELECT * FROM report;
分享到:
评论

相关推荐

    DB2递归.docx

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

    db2 存储过程语法与实例

    DB2存储过程是一种在数据库管理系统中预编译的SQL代码集合,它允许开发人员封装复杂的业务逻辑和数据处理操作,并可以被多次调用。DB2作为一款强大的关系型数据库管理系统,其存储过程功能强大,提高了应用程序的...

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

    DB2的语法结构遵循SQL标准,但也有一些特有的扩展和优化。 1. **基本语法格式**: - 查询示例:`SELECT column_name(s) FROM table_name WHERE condition;` - 更新示例:`UPDATE table_name SET column_name = new...

    ORACLE转DB2对照全解

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

    将 CONNECT BY 移植到 DB2

    本文旨在指导读者如何将 Oracle 数据库中的 `CONNECT BY` 语法及其相关的伪列转换为适用于 IBM DB2 Universal Database (DB2 UDB) for Linux、UNIX 和 Windows 的递归公共表表达式 (Recursive Common Table ...

    db2迁移到mysql.docx

    这包括了数据类型转换、SQL语法差异处理、函数转换等方面的内容。 #### 二、withur处理 在DB2中,`WITH UR` 是一个用于优化查询性能的选项,它表示“无需恢复”(Without Recovery),意味着读取的数据可能不是最新的...

    程序员的SQL金典.rar

    透彻分析函数、子查询、表连接、不同DBMS中的SQL语法差异、SQL调优、NULL值处理、事务、开窗函数等高级技术;通过对实际案例开发过程的详细分析,使读者掌握 SQL的综合应用技巧。 内容简介 本书主要介绍SQL的语法...

    db2认证730-731练习

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

    DB2兼容模式设置文档

    本文档主要介绍如何将IBM DB2数据库设置为Oracle兼容模式,并列举了一些关键的验证点,包括数据类型、SQL语法特性的差异、公共视图和存储过程等。通过这些验证点,可以确保在DB2上运行原本为Oracle设计的应用程序时...

    DB2学习记录

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

    SQL袖珍参考手册(第3版)

    - **中文名**: SQL袖珍参考手册(第3版,涵盖DB2,MySQL,Oracle,PostgreSQL,SQL Server) - **原名**: SQL Pocket Guide: A Guide to SQL Usage - **作者**: Jonathan Gennick - **资源格式**: PDF - **版本**: ...

    面试:如果在现在开发时使用的数据库是DB2(IBM的数据库产品),可能要使用Oracle。在这种背景下,如何开发?

    1. **数据模型与SQL语法比较**: - DB2和Oracle都支持SQL,但语法和功能上存在差异。例如,DB2支持`WITH`子句的递归查询,而Oracle则有`CONNECT BY`语法来实现相同功能。开发者需要对比两者的语法差异,并对SQL脚本...

    db2与oracle差别.pdf

    本文将详细介绍 Oracle 和 DB2 之间的差异,包括并发机制、数据类型、隐式类型转换、SQL 方言、PL/SQL 语言、置包、客户端编程接口、框架、数据库事故恢复能力、并行机制和分区等十一个方面的差异。 一、并发机制 ...

    Effective SQL-原版PDF

    - 不仅讲述SQL的基础语法,更重要的是阐述了为什么这样使用的原因。 - 将数据库设计考虑融入到SQL使用的各个方面。 - 提供跨数据库管理系统的有效SQL编写技巧。 #### 二、数据库设计与实现 - **设计原则**: -...

    关系数据库语言SQL.pptx

    3. 简洁且强大:SQL语法简洁,但功能强大,可以处理复杂的数据操作,如子查询、连接、集合操作等。 随着技术的发展,SQL也在不断进化,新的版本如SQL92、SQL99(SQL3)引入了更多高级特性,如窗口函数、游标、递归...

    DB2错误解决手册

    - **42** - **语法错误或访问规则违例**:SQL语句语法错误或违反了访问控制规则。 - **44** - **WITH CHECK OPTION违例**:WITH CHECK OPTION使用不当。 - **46** - **Java DDL**:Java DDL执行过程中出现问题。 - *...

Global site tag (gtag.js) - Google Analytics