返回顶部
首页 > 资讯 > 数据库 >SQL中的递归原理
  • 641
分享到

SQL中的递归原理

2024-04-02 19:04:59 641人浏览 八月长安
摘要

这篇文章主要介绍“sql中的递归原理”,在日常操作中,相信很多人在SQL中的递归原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL中的递归原理”的疑惑有所帮助!接下来,

这篇文章主要介绍“sql中的递归原理”,在日常操作中,相信很多人在SQL中的递归原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL中的递归原理”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

递归查询原理

SQL  Server中的递归查询是通过CTE(表表达式)来实现。至少包含两个查询,第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点;第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。

递归查询的终止条件

递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURioN。

递归查询的优点

效率高,大量数据集下,速度比程序的查询快。

递归的常见形式

WITH CTE AS ( SELECT column1,column2... FROM tablename WHERE conditions UNION ALL SELECT column1,column2... FROM tablename  INNER JOIN CTE ON conditions  )

递归查询示例

创建测试数据,有一个员工表Employee,ManagerID是UserID的父节点,这是一个非常简单的层次结构模型。

USE SQL_Road Go  CREATE  TABLE Employee (     UserID INT,     ManagerID INT,     Name NVARCHAR(10) )  INSERT  INTO dbo.Employee  SELECT 1,-1,N'Boss'  UNION  ALL  SELECT 11,1,N'A1'  UNION  ALL  SELECT 12,1,N'A2'  UNION  ALL  SELECT 13,1,N'A3'  UNION  ALL  SELECT 111,11,N'B1'  UNION  ALL  SELECT 112,11,N'B2'  UNION  ALL  SELECT 121,12,N'C1'

查询一下Employee表里的数据

SQL中的递归原理

查询每个User的的直接上级Manager

WITH CTE AS(  SELECT UserID,ManagerID,Name,Name AS ManagerName  FROM dbo.Employee  WHERE ManagerID=-1  UNION ALL  SELECT c.UserID,c.ManagerID,c.Name,p.Name AS ManagerName  FROM CTE P  INNER JOIN dbo.Employee c ON p.UserID=c.ManagerID )  SELECT UserID,ManagerID,Name,ManagerName FROM CTE

结果如下:

SQL中的递归原理

我们来解读一下上面的代码

1、查询ManagerID=-1,作为根节点,这是递归查询的起始点。

2、迭代公式是 UNION ALL 下面的查询语句。在查询语句中调用中CTE,而查询语句就是CTE的组成部分,即  “自己调用自己”,这就是递归的真谛所在。

所谓迭代,是指每一次递归都要调用上一次查询的结果集,UNION ALL是指每次都把结果集并在一起。

3、迭代公式利用上一次查询返回的结果集执行特定的查询,直到CTE返回NULL或达到最大的迭代次数,默认值是32。最终的结果集是迭代公式返回的各个结果集的并集,求并集是由UNION  ALL 子句定义的,并且只能使用UNION ALL

查询路径

下面我们通过层次结构查询子节点到父节点的PATH,我们对上面的代码稍作修改:

WITH CTE AS(  SELECT UserID,ManagerID,Name,CAST(Name AS NVARCHAR(MAX)) AS LPath   FROM dbo.Employee  WHERE ManagerID=-1  UNION ALL  SELECT c.UserID,c.ManagerID,c.Name,p.LPath+'->'+c.Name AS LPath  FROM CTE P  INNER JOIN dbo.Employee c ON p.UserID=c.ManagerID  )  SELECT UserID,ManagerID,Name,LPath FROM CTE

其中CAST(Name AS NVARCHAR(MAX))是将Name的长度设置为最大,防止字段过长超出字段长度。具体结果如下:

SQL中的递归原理

到此,关于“SQL中的递归原理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: SQL中的递归原理

本文链接: https://lsjlt.com/news/56206.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQL中的递归原理
    这篇文章主要介绍“SQL中的递归原理”,在日常操作中,相信很多人在SQL中的递归原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL中的递归原理”的疑惑有所帮助!接下来,...
    99+
    2024-04-02
  • C++ 函数递归详解:递归的定义和原理
    递归是一种函数调用自我的编程技术,通过将问题分解成较小问题、设置边界条件和递减问题来实现。以求斐波那契数列为例,递归函数使用边界条件(n ≤ 1)和递减问题(fib(n - 1) + f...
    99+
    2024-05-01
    函数 递归 c++
  • Python递归函数的原理及应用
    本篇内容主要讲解“Python递归函数的原理及应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python递归函数的原理及应用”吧!一、什么是递归函数在函数内部,可以调用其他函数。如果一个函数...
    99+
    2023-06-15
  • 详解Python中递归函数的原理与使用
    目录什么是递归函数递归函数的条件定义一个简单的递归函数代码解析内存栈区堆区死递归尾递归实例什么是递归函数 如果一个函数,可以自己调用自己,那么这个函数就是一个递归函数。 递归,递就是...
    99+
    2024-04-02
  • 原:八皇后问题的递归和非递归Java实现
    原:八皇后问题的递归和非递归实现八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名 的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线...
    99+
    2023-06-03
  • C++ 函数递归详解:递归错误的常见原因
    递归函数的常见错误包括无限递归,导致函数无限调用自身;堆栈溢出,当递归调用过多时发生;逻辑错误,递归函数可能产生不正确的答案。实战案例中,使用递归计算阶乘,利用阶乘的定义将较大规模的阶乘...
    99+
    2024-04-30
    c++ 函数递归 堆栈溢出
  • C++ 中递归的边界情况处理:理解递归终止条件
    递归中边界情况处理至关重要,以下为步骤:确定基本情况:递归终止并返回结果的条件。在基本情况下返回:满足基本情况时,函数立即返回结果。在递归情况下调用自身:不满足基本情况时,函数调用自身并...
    99+
    2024-04-30
    递归 边界条件 c++
  • SQL中怎么实现递归查询
    SQL中怎么实现递归查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 with cte as(selec&#...
    99+
    2024-04-02
  • PHP中的递归
    递归是一种函数直接或间接调用自身的编程技术。这可用于解决可分解为相同类型的较小子问题的问题。例如,以下递归函数可用于计算数字的阶乘:function factorial($n) {     if ($n === 0) {         r...
    99+
    2023-10-22
    php 递归
  • PL/SQL中的递归查询怎么实现
    在PL/SQL中,可以使用递归函数来实现递归查询。递归函数是指在函数内部调用自身的函数。 以下是一个示例,演示了如何在PL/SQL中...
    99+
    2024-05-08
    PL/SQL
  • PHP 函数递归调用的原理和应用
    函数递归原理:函数调用自身(自引用)。每次调用参数变化。持续递归,直至满足递归条件(停止条件)。函数递归应用:简化复杂问题(分解成子问题)。简洁代码(更优雅)。案例:计算阶乘(分解为乘积...
    99+
    2024-04-17
    php 递归调用
  • 【Mysql】一篇学会SQL中的递归的用法
    【Mysql】SQL高级技巧——递归用法及案例详解 1. SQL递归概念:          SQL递归查询是一种用于处理具有层次结构的数据的技术。它使用递归函数来遍历树形结构,例如组织结构、分类结构等等。         递归查询通常使用...
    99+
    2023-09-03
    sql mysql 数据库
  • sql server中怎么实现递归查询
    sql server中怎么实现递归查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。sql server 通过CTE来支持递归查询,这对查...
    99+
    2024-04-02
  • sql语句怎么查递归
    sql 通过递归查询允许查询具有自引用关系的数据。步骤包括:确定递归关系。编写递归 cte,使用 union all 连接递归子查询和基本查询。指定递归终止条件。使用 with...
    99+
    2024-06-03
    sql语句
  • C++ 函数递归详解:递归在字符串处理中的应用
    递归函数是一种在字符串处理中反复调用自身来解决问题的技术。它需要一个终止条件以防止无限递归。递归在字符串反转和回文检查等操作中被广泛使用。 C++ 函数递归详解:递归在字符串处理中的应...
    99+
    2024-04-30
    c++ 递归
  • C++ 函数递归详解:回溯法中的递归
    c++++ 函数递归详解:递归是函数调用自身的一种技术,在回溯法等算法中很有用。回溯法是通过系统地尝试所有解决方案并回溯到死胡同时来解决问题的。数独求解是递归函数在回溯法中实际应用的例子...
    99+
    2024-05-03
    c++ 回溯法 函数递归
  • sql递归查询父子节点
    一、表结构 二、递归查询当前节点的所有父节点 select * from test start with id = 3 connect by prior pid = id 三、递归查询当前节点的所有子节点 sele...
    99+
    2014-07-18
    sql递归查询父子节点
  • 如何理解JavaScript中的递归函数
    今天就跟大家聊聊有关如何理解JavaScript中的递归函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是递归函数在编程世界里面,递归就是一个...
    99+
    2024-04-02
  • 递归的艺术在 C++ 中:原理、优势和局限性探讨
    递归是一种函数调用自身的编程技术,允许分解复杂问题为较小的子问题。其优点包括代码简洁、优雅,适用于处理复杂问题,但缺点是可能导致堆栈溢出、效率低和调试困难。 递归的艺术在 C++ 中:...
    99+
    2024-05-01
    c++ 递归 堆栈溢出
  • C++ 函数递归详解:动态规划中的递归
    摘要:递归调用在 c++++ 中通过调用自身的函数实现。斐波那契数列的递归求解需要三个组成部分:基础条件(n 小于等于 1)、递归调用(自身求解 f(n-1) 和 f(n-2))、递增/...
    99+
    2024-05-03
    c++ 递归
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作