With...As 用法--公用表达式

前言:

在看牛腩视频的时候,发现有一个with...as语句,用于分页的使用,于是就查了一下,结果发现了这个语句非常了不起,下面就说一下这个是什么东西。

内容:


一、公用表达式概念

公用表达式 (Common Table Expression) 简称:CTE,可以看做一个临时的结果集,在接下来的select ,insert,update,delete可以被多次引用。使用公用表达式CTE可以让语句更加清晰简练。临时存储结果集的方法:临时表和表变量。

视图和临时表 、表变量:

视图:是一条预编译的SQL语句,并不保存实际数据。是一个快照,一个虚表,不分配物理空间。结构:快照

临时表:保存在tempdb中的实际的表,是客观存在的表类型对象。分配物理空间。结构:表

表变量:和普通的变量一样,在定义表变量的存储过程、批处理、动态语句、函数结束时,会自动清除。

微软对CTE描述:

可以在一个语句中多次引用公用表达式

GROUP BY语句可以直接作用于子查询所得的标量列

当不需要将结果集作为视图被多个地方引用时,CTE可以使其更加简洁

可以定义递归公用表表达式(CTE)

二、with...as语句

with...as语句,也叫作子查询部分(subquery factoring),定义一个SQL片段,该SQL片段会被整个SQL语句所用到。如果WITH AS所以定的表名被调用两次以上,则优化器会自动将WITH AS所获取的数据放入临时表里,如果只是被调用一次,则不会。可以通过materialize将WITH AS短语里的数据强制放入全局临时表里。

WITH AS可以被紧跟着的一条SQL语句所使用多次,但不能被紧跟着的多条SQL语句使用。

语法:


with  公用表达式名字  as

(select * from xxx  where  条件)

select * from 公用表达式名字

下面是一条语句引用多个cte,可以定义多个,中间用逗号分隔:

with cte 
as
(
select * from news
),
cte2 
as
(
select * from news
)

select * from cte c
inner join cte2 b
on c.caId =b.id 

输出结果:

With...As 用法--公用表达式_第1张图片

SQL UNION 操作符:UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

你可能感兴趣的:(牛腩新闻发布系统)