1、概述
公用表表达式(或通用表表达式)简称为CTE(Common Table Expressions)。
CTE是一个命名的临时结果集,作用范围是当前语句。
CTE可以理解成一个可以复用的子查询,当然跟子查询还是有点区别的, CTE可以引用其他CTE,但子查询不能引用其他子查询。所以,可以考虑代替子查询。
2、CTE的分类
(1)普通公用表表达式
普通公用表表达式类似于子查询,但是普通公用表表达式可以被多次引用,同时也可以被其他的公用表表达式引用。
普通公用表表达式的语法结构是:
WITH CTE名称
AS (子查询)
SELECT|DELETE|UPDATE 语句;
(2)递归公用表表达式
递归公用表表达式也是一种公用表表达式,只不过,除了普通公用表表达式的特点以外,它还有自己的 特点,就是可以调用自己。
语法结构是:
WITH RECURSIVE
CTE名称 AS (子查询)
SELECT|DELETE|UPDATE 语句;
递归公用表表达式由 2 部分组成,分别是种子查询和递归查询,中间通过关键字 UNION [ALL]进行连接。 这里的种子查询,意思就是获得递归的初始值。这个查询只会运行一次,以创建初始数据集,之后递归 查询会一直执行,直到没有任何新的查询数据产生,递归返回。