CTE的介绍与使用

 

1、什么是CTE

CTE可以被认为是在单个SELECT、INSERT 、UPDATE、DELETE或CREATE VIEW语句的执行范围内定义的临时结果集。CTE类似于派生表,因为它不作为对象存储,并且仅在查询期间持续。与派生表不同,CTE可以自引用,并且可以在同一查询中多次使用。

 

2、CTE作用:

  •     创建递归查询

  • 在一般不是必要使用视图时替换视图,这样的话,就不需要存储元数据

  • 在同一语句中,多次涉及到一个结果表

 

使用CTE具有提高可读性和易于维护复杂查询的优点。查询可以分为单独的简单逻辑构建块。然后,可以使用这些简单的块来构建更复杂的临时CTE,直到生成最终结果集。

 

CTE可以在函数、存储过程、触发器、视图中定义使用。

 

3、CTE的结构

 

CTE 由CTE的表达式名称,可选列列表和定义CTE的查询组成。定义CTE后,可以在SELECT,INSERT,UPDATE,DELETE语句中像表或视图一样引用它。CTE可以在 CREATE VIEW语句中用作其定义SELECT语句的一部分。

 

CTE的基本语法结构是:

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

AS

( CTE_query_definition )

--只有在查询定义中提供了所有结果列的不同名称时,列名列表才是可选的。

--在语句中使用CTE:

SELECT <column_list>

FROM expression_name;

4、举个例子

 

    下面的例子展示了CTE的组成:表达式名称,可选列列表,查询语句。

-- 定义CTE表达式名称和列 .

WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)

AS

--定义查询语句.

(

    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear

    FROM Sales.SalesOrderHeader

    WHERE SalesPersonID IS NOT NULL

)

-- 对外使用CTE进行查询.

SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear

FROM Sales_CTE

GROUP BY SalesYear, SalesPersonID

ORDER BY SalesPersonID, SalesYear;

部分结果展示:

SalesPersonID TotalSales  SalesYear

------------- ----------- -----------

274           4           2001

274           20          2002

274           14          2003

274           10          2004

275           56          2001

275           139         2002

275           169         2003

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值