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的更多相关文章

  1. 数据库递归查询(CET)

    IF OBJECT_ID('[ta]') IS NOT NULL      DROP TABLE [ta] Go CREATE TABLE ta([id] INT,[name] NVARCHAR(4) ...

  2. 关于使用CTE(公用表表达式)的递归查询

    --关于使用CTE(公用表表达式)的递归查询 --CTE 的基本语法结构如下: WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_qu ...

  3. SqlServer :实现树形结构递归查询(无限极分类)

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一 ...

  4. sqlserver实现树形结构递归查询(无限极分类)

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE ...

  5. JSP应用开发 -------- 电纸书(未完待续)

    http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术   第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...

  6. SqlServer CTE 递归查询 Oracle递归查询

    在做数据库设计这块,很多时候表的数据模型就是典型的二叉树结构. 于是在查询数据的时候,就涉及到了数据的递归查询. 递归查询分为两种:1.从根节点查询自身以及所有的子节点:2.从子节点查询自身以及所有的 ...

  7. 数据库中暂时表,表变量和CTE使用优势极其差别

    1 在写SQL时常常会用到暂时表,表变量和CTE,这三者在使用时各有优势: 1. 暂时表:分为局部暂时表和全局暂时表. 1.1局部暂时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接 ...

  8. CTE 递归查询

    使用CTE进行递归查询,能够实现对层次结构的数据的快速访问,非常有用. TSql CTE 递归原理探究 TSql 分层和递归查询 1,CTE的递归结构 递归查询的结构包括两部分:起始点和迭代公式. 使 ...

  9. SQL Server 2005中的CTE递归查询得到一棵树

    感觉这个CTE递归查询蛮好用的,先举个例子: use City; go create table Tree ( ID int identity(1,1) primary key not null, N ...

随机推荐

  1. 剑指Offer 调整数组顺序使奇数位于偶数前面

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.     思路: ...

  2. linux回收站设计

    linux回收站设计 在windows下有一个很好的东西,那就是回收站,虽然有很多人批评它.linux不是没有回收站,很多桌面环境都可以看到是有回收站的. 这里是讨论如何设计一个回收站,而不是有没有的 ...

  3. COGS 2421.[HZOI 2016]简单的Treap 题解

    题目大意: 给定n个数及其优先级,求对应的符合最小堆性质的Treap的先序遍历. n<=500000. 解法: 目前为止我只想到了三种解法,其中第三种是正解. 1.暴力1 以优先级为关键字排序, ...

  4. springboot 整合Redis

    0.导入 maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifact ...

  5. 一步步搭建docker私有仓库并从私有仓库中下载镜像

    一步步搭建docker私有仓库 #下载镜像 docker pull registry#查看镜像 docker images #运行私有仓库,指定端口和数据卷 docker run -d -p : -v ...

  6. Light OJ 1032

    数位dp,许多数位dp需要统计某种模式(子串)出现的数量,这种题通常需要在递归参数中加入高位已经出现过的模式的数量. #include <cstdio> #include <cstr ...

  7. 百度和google的区别

    一.百度 二.google

  8. MySQL 利用SQL线程对Binlog操作

    背景: 对于MySQL的binlog的查看都是用其自带的工具mysqlbinlog进行操作的,其实还有另一个方法来操作binlog,就是Replication中的SQL线程去操作binlog,其实bi ...

  9. google 语音api

    mdeia.Source = new Uri("http://translate.google.cn/translate_tts?ie=UTF-8&q=你好&tl=zh-CN ...

  10. Enum:Game of Lines(POJ 3668)

    画直线 题目大意:给定一些点集,要你找两点之间的连线不平行的有多少条 数据量比较少,直接暴力枚举,然后放到set查找即可 #include <iostream> #include < ...