下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

使用Sq lServer CTE递归查询处理树、图和层次结构

作者:课课家教育     来源: http://www.kokojia.com点击数:1112发布时间: 2019-03-06 13:50:59

标签: 数据库Sq lServer递归查询

  在sqlserver2005之前,要实现递归功能比较麻烦,比如可能会要用到临时表与while语句来循环。CTE(CommonTableExpressions)是从SQLServer2005以后版本才有的。指定的临时命名结果集,这些结果集称为CTE。与派生表类似,不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE可自引用,还可在同一查询中引用多次。使用CTE能改善代码可读性,且不损害其性能。

  递归查询

  域名服务器将代替提出请求的客户机(下级DNS服务器)进行域名查询,若域名服务器不能直接回答,则域名服务器会在域各树中的各分支的上下进行递归查询,最终将返回查询结果给客户机,在域名服务器查询期间,客户机将完全处于等待状态。

  递归CTE是SQLSERVER2005中重要的增强之一。一般我们在处理树,图和层次结构的问题时需要用到递归查询。

  SQL-图,树,层次结构和递归查询

  树:指二叉,三叉树,属于有向无循环图,且根结点只有一个

  层次结构:如料表,属于有向无循环图DAG,不过和树不同,根结点可以是一个或多个

  图:通用概念,主要是看是否有循环,循环的如道路系统,即无向循环图

  Sql递归原理

  递归最少包括两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。

  第二个查询被称为递归成员,使该查询成为递归成员的是对递归引用时触发(递归表.id与该表的pid)。在逻辑上,可以将其理解为是前一个查询语句的子集。

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

  CTE的语法如下

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

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

 递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。    递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。

  小编结语:

  以上内容就是本文给大家介绍的使用SqlServerCTE递归查询处理树、图和层次结构~~

  更多内容尽在课课家教育!

赞(10)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程