公用表表达式(CTE)的定义

公用表达式的定义包含三部分:

公用表表达式的名字(在WITH之后)
所涉及的列名(可选)
一个SELECT语句(紧跟AS之后),

公用表表达式的好处之一是可以在接下来一条语句中多长引用,记得是接下来一条语句

在MSDN中的原型:

WITH expression_name [ ( column_name [,...n] ) ]AS( CTE_query_definition )

非递归公用表表达式(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 1 and 10

递归CTE调用

指的是在CTE内的语句中调用其自身的CTE。CTE可以在一次定义多次进行派生递归。对于递归的概念,是指一个函数或是过程直接或者间接的调用其自身;

CTE递归调用常用的地方是一个表中含有所属关系,查询所属当前数据的子数据;

简单定义一个表:

CREATE TABLE [dbo].[adminpart]([ID] [int] IDENTITY(1,1) NOT NULL,--当前ID[name] [nvarchar](50) NOT NULL,--姓名[parentid] [int] NOT NULL--父类ID
)

数据如下

查询admin下的所有用户,这个时候就需要要用递归的概念来完成:

with admin_CET
as
(select ID,name,parentid,0 as alv from adminpart where name='admin'--基础查询union allselect ap.ID,ap.name,ap.parentid,alv+1 as alv from admin_CET ac inner join adminpart apon ap.parentid=ac.ID  --递归join查询,注意一定是ap.parentid=ac.ID,如果不理解,就要搞明白递归的概念
)

CTE的出现,很好的解决了互为主子关系数据类型的查询。注:SQL2003不支持CTE。

备注:

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

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

Mysql递归的语法有点差异

主要多了RECURSIVE,祥见:【笔记】MYSQL8新功能CTE(公共表表达式)优雅实现递归查询

【数据库】CTE(Common Table Expression(公共表表达式))相关推荐

  1. SQLServer中的CTE(Common Table Expression)通用表表达式使用详解

    概述 我们经常会编写由基本的 SELECT/FROM/WHERE 类型的语句派生而来的复杂 SQL 语句.其中一种方案是需要编写在 FROM 子句内使用派生表(也称为内联视图)的 Transact-S ...

  2. mysql cte 表不存在_MySQL8.0新特性CTE(Common Table Expression)

    CTE(Common Table Expression)可以认为是派生表(derived table)的替代,在一定程度上,CTE简化了复杂的join查询和子查询,提高了SQL的可读性和执行性能.CT ...

  3. sql server 公共表表达式【CTE 】、临时表、变量表

    公用表表达式(CTE) common table expression WITH 命令用于为 SELECT 表达式返回的结果集定义别名. -----公用表表达式CTE 语法 WITH common_t ...

  4. mysql cte_MySQL CTE(公共表表达式)

    在本教程中,您将学习如何使用MySQL CTE或公用表表达式以更可读的方式构建复杂查询. 自MySQL 8.0版以来简要介绍了公共表表达式或叫CTE的功能,因此需要您在计算机上安装MySQL 8.0, ...

  5. mysql 单标递归_MySQL递归CTE(公共表表达式)

    在本教程中,您将了解MySQL递归CTE(公共表表达式)以及如何使用它来遍历分层数据. 自MySQL 8.0版以来简要介绍了公共表表达式或叫CTE的功能,因此需要您在计算机上安装MySQL 8.0,以 ...

  6. 介绍PostgreSQL CTE(common table expressions)

    介绍PostgreSQL CTE(common table expressions) 本文我们学习如何使用PostgreSQL CTE(common table expressions)简化复杂查询. ...

  7. 数据库学习 - create table(创建表)

    创建table 简单语法形式: create table 表名(列名 数据类型[primary key|unique] [not null] [,列名 数据类型[not null],...]); &q ...

  8. Sql — CTE公用表表达式和With用法总结

    CTE(Common Table Expression) 公用表表达式,它是在单个语句的执行范围内定义的临时结果集,只在查询期间有效.它可以自引用,也可在同一查询中多次引用,实现了代码段的重复利用. ...

  9. mysql cte的好处_Mysql 8 重要新特性 - CTE 通用表表达式

    前言 Mysql 8 正式发布了,新增了很多优秀特性,之后我会挑些重点来分享. 下面和大家一起熟悉下CTE(Common Table Expressions)通用表表达式. CTE 是什么 派生表大家 ...

最新文章

  1. SqlServer查询语句中用到的锁
  2. OEA 2.11 支持单机版数据库 - SQLite与SQLCE对比
  3. WriteableBitmap process summary
  4. Topcoder Asia Programming Competition
  5. DataLoader, when num_worker 0, there is bug
  6. 这些测试细节,你注意到了吗?
  7. PTA—计算摄氏温度(C语言)
  8. 腾讯手游助手选择不了服务器失败,腾讯手游助手启动模拟器失败的解决方法
  9. PHP实现生成二维码的示例代码
  10. IntelliJ IDEA 2017 汉化包及教程
  11. STM32F103ZET6硬件资源简介
  12. 树莓派4B连接显示器 黑屏、左上角有光标问题
  13. 【网络问题】微软商店无法打开:重试该操作,无法加载页面。请稍后重试
  14. Java web+MySQL编写简易候选人投票(完整代码)
  15. 发送验证码-阿里云短信服务
  16. 深度强化学习笔记(二)——Q-learning学习与二维寻路demo实现
  17. mysql: create routin表示的是什么?,关于mysql create routine 权限的一些说明
  18. python学习笔记,初学者Python3
  19. 闪客工具:greensock出的TransformManager类
  20. 探索使用 Unity 开发 Gear VR App 遇到的坑

热门文章

  1. 真正能改变你一生的五句话
  2. 潇洒郎: centos windows 命令行常用
  3. PTA 10-49 查询学生表中部分信息
  4. 【图解计算机网络】物理层和MAC层的亲密关系
  5. 希尔伯特曲线 java_分形的乐趣之_Hilbert曲线
  6. Linux下C语言时间函数使用及UTC时间转换本地时间
  7. msp430单片机接收(FIFO实现)不阻塞CPU
  8. el-table表格中行样式修改不生效
  9. Java谷歌无头模式速度_Java selenium无头模式下载CFM文件问题
  10. 读书笔记 - 《世界大格局中国有态度》