数据库递归查询-CTE
1、公用表表达式(CTE)的定义
公用表达式的定义包含三部分:
公用表表达式的名字(在WITH之后)
所涉及的列名(可选)
一个SELECT语句(紧跟AS之后),
公用表表达式的好处之一是可以在接下来一条语句中多长引用,记得是接下来一条语句
在MSDN中的原型:
WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition )
2、非递归公用表表达式(CTE)
非递归的CTE引用与普通Select查询没有太实质性的区别,调用如下:
with admin_CET
as
(
select ID,name,parentid from adminpart
)
select ID,name,parentid from admin_CET
非递归CTE调用比较常用的地方就是分页查询:
with admin_CET
as
(
select ID,name,parentid,row_number() over(order by ID) as rowNum from adminpart
)
select ID,name,parentid,rowNum from admin_CET where rowNum between and
3、递归CTE调用:
指的是在CTE内的语句中调用其自身的CTE。CTE可以在一次定义多次进行派生递归。对于递归的概念,是指一个函数或是过程直接或者间接的调用其自身;
CTE递归调用常用的地方是一个表中含有所属关系,查询所属当前数据的子数据;
简单定义一个表:
CREATE TABLE [dbo].[adminpart](
[ID] [int] IDENTITY(,) NOT NULL,--当前ID
[name] [nvarchar]() NOT NULL,--姓名
[parentid] [int] NOT NULL--父类ID
)
数据如下

查询admin下的所有用户,这个时候就需要要用递归的概念来完成:
with admin_CET
as
(
select ID,name,parentid, as alv from adminpart where name='admin'--基础查询
union all
select ap.ID,ap.name,ap.parentid,alv+ as alv from admin_CET ac inner join adminpart ap
on ap.parentid=ac.ID --递归join查询,注意一定是ap.parentid=ac.ID,如果不理解,就要搞明白递归的概念
)
select ID,name,parentid,alv from admin_CET
CTE的出现,很好的解决了互为主子关系数据类型的查询。注:SQL2003不支持CTE。
备注:
递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。
递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。
数据库递归查询-CTE的更多相关文章
- 数据库递归查询(CET)
IF OBJECT_ID('[ta]') IS NOT NULL DROP TABLE [ta] Go CREATE TABLE ta([id] INT,[name] NVARCHAR(4) ...
- 关于使用CTE(公用表表达式)的递归查询
--关于使用CTE(公用表表达式)的递归查询 --CTE 的基本语法结构如下: WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_qu ...
- SqlServer :实现树形结构递归查询(无限极分类)
SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一 ...
- sqlserver实现树形结构递归查询(无限极分类)
SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE ...
- JSP应用开发 -------- 电纸书(未完待续)
http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术 第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...
- SqlServer CTE 递归查询 Oracle递归查询
在做数据库设计这块,很多时候表的数据模型就是典型的二叉树结构. 于是在查询数据的时候,就涉及到了数据的递归查询. 递归查询分为两种:1.从根节点查询自身以及所有的子节点:2.从子节点查询自身以及所有的 ...
- 数据库中暂时表,表变量和CTE使用优势极其差别
1 在写SQL时常常会用到暂时表,表变量和CTE,这三者在使用时各有优势: 1. 暂时表:分为局部暂时表和全局暂时表. 1.1局部暂时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接 ...
- CTE 递归查询
使用CTE进行递归查询,能够实现对层次结构的数据的快速访问,非常有用. TSql CTE 递归原理探究 TSql 分层和递归查询 1,CTE的递归结构 递归查询的结构包括两部分:起始点和迭代公式. 使 ...
- SQL Server 2005中的CTE递归查询得到一棵树
感觉这个CTE递归查询蛮好用的,先举个例子: use City; go create table Tree ( ID int identity(1,1) primary key not null, N ...
随机推荐
- centos 终端 字体颜色
默认情况下,没有颜色. https://www.centos.org/docs/2/rhl-gsg-en-7.2/ls-color.html git也默认没有颜色,破解如下: git config - ...
- ubuntu安装skype
1.添加源 sudo add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner&quo ...
- Access an instance through a console
VNC or SPICE is used to view the console output of an instance, regardless of whether or not the con ...
- Linux之绝处逢生------SysRq
参考: http://www.linuxfly.org/post/545/ http://www.jb51.net/article/13525.htm 做法: 未雨绸缪 # " > / ...
- ios Swift 一些注意事项
func test(one:NSString) -> NSString{ return "aaa" } func test(one:Int) -> NSString{ ...
- Linux下安装gcc和g++
以CentOS为例,安装后是没有C语言和C++编译环境的,需要手动安装,最简单的是用yum的方式安装,过程如下: 1.安装gcc yum install gcc 询问是否,按y键回车即可,或者 yum ...
- 5.nodejs权威指南--HTTP
1. HTTP 1.1 服务器 var http = require('http'); var server = http.createServer(function(req,rsp){ req.on ...
- 8.SpringMVC参数传递
页面参数传递到controller, 可被同名(与页面标签上的name名对应)的参数接收,用request设值,页面再取出来. 注意乱码解决办法: ①如果是get提交,则在tomcat的server. ...
- 安装/移除Windows服务
在工作中,涉及到相关Windows的开发时,常常要安装.移除Windows服务程序.一般地,可通过cmd命令行操作来完成~ cd 服务程序所在目录 *.exe -i // 安装服务 *.exe -s ...
- ArtDialog文档
http://www.planeart.cn/demo/artDialog/_doc/API.html#API