使用公用表表达式
来源:互联网 发布:电商网络销售是做什么 编辑:程序博客网 时间:2024/05/01 17:25
公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。
CTE 可用于:
创建递归查询。有关详细信息,请参阅使用公用表表达式的递归查询。
在不需要常规使用视图时替换视图,也就是说,不必将定义存储在元数据中。
启用按从标量嵌套 select 语句派生的列进行分组,或者按不确定性函数或有外部访问的函数进行分组。
在同一语句中多次引用生成的表。
使用 CTE 可以获得提高可读性和轻松维护复杂查询的优点。查询可以分为单独块、简单块、逻辑生成块。之后,这些简单块可用于生成更复杂的临时 CTE,直到生成最终结果集。
可以在用户定义的例程(如函数、存储过程、触发器或视图)中定义 CTE。
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;
示例
下面的示例显示了 CTE 结构的组件:表达式名称、列列表和查询。CTE 表达式 Sales_CTE 包含三个列(SalesPersonID、SalesOrderID 和 OrderDate),被定义为每个销售人员的每年销售订单总数。
Transact-SQL复制
USE AdventureWorks2008R2;
GO
-- Define the CTE expression name and column list.
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)
AS
-- Define the CTE query.
(
SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear
FROM Sales.SalesOrderHeader
WHERE SalesPersonID IS NOT NULL
)
-- Define the outer query referencing the CTE name.
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear
FROM Sales_CTE
GROUP BY SalesYear, SalesPersonID
ORDER BY SalesPersonID, SalesYear;
GO
以下为部分结果集:
SalesPersonID TotalSales SalesYear
------------- ----------- -----------
274 4 2001
274 20 2002
274 14 2003
274 10 2004
275 56 2001
275 139 2002
275 169 2003
- 使用公用表表达式
- 使用公用表表达式(CTE)
- 公用表表达式CTE
- 公用表表达式GTE
- 公用表表达式(CTE)
- 公用表表达式CTE
- 公用表表达式(CTE)
- 使用公用表表达式的递归查询
- Tip - 使用SQL公用表表达式返回日期列
- 使用公用表表达式的递归查询
- 使用公用表表达式(CTE)简化嵌套SQL
- 使用公用表表达式(CTE)简化嵌套SQL
- 使用公用表表达式的递归查询(CTE)
- 使用公用表表达式的递归查询
- 公用表表达式(CTE)
- 公用表表达式(Common Table Expression)
- 详解公用表表达式(CTE)
- T-SQL 公用表表达式(CTE)
- 关于map task和reduce task的个数
- System memory,AGP memory和video memory
- POJ1157解题报告
- 编译cairo(win7 环境下vs2008编译cairo1.10.2 成功)
- C#设计模式之7——适配器模式
- 使用公用表表达式
- H264解码器源码(Android 1.6 版)
- Ubuntu 配置Eclipse
- 展现自己的人生智慧
- 仿163首页的广告收缩效果/菜单滑动/进度条
- 最大子矩阵(poj1050)
- txt文本导入SqlServer数据库
- MapReduce执行过程
- 做一个心如止水的程序员