1 / 2
文档名称:

SQL Server2005数据库查询中使用CTE.pdf

格式:pdf   页数:2
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

SQL Server2005数据库查询中使用CTE.pdf

上传人:翩仙妙玉 2012/9/16 文件大小:0 KB

下载得到文件列表

SQL Server2005数据库查询中使用CTE.pdf

文档介绍

文档介绍:踏雪无痕
SQL Server2005数据库查询中使用CTE
分类: 数据库 2011-10-08 17:47 92人阅读评论(0) 收藏举报
转自:?id=183
通用表表达式(CTEs)是SQL Server 2005的一项新功能。它们类似于alias(如在Select T1.*
FROM MyTable T1中),不过功能更为强大。本质上,CTE是一个临时结果集,它仅仅存在于它发生
的语句中。您可以在Select、Insert、Delete、Update或CTEATE VIEW语句中建立一个CTE。CTE类
似于派生表,但拥有几项优点。
CTE的优点
与派生表不同,CTE能够引用自己本身。如果您不必存储视图,您可以用一个CTE来代替它。在一个
语句中,您还可以多次引用CTE。应用CTE,您可以通过一个派生栏对结果进行分组。
之前,我曾写过有关原子和分子查询的文章。原子查询建立一个表,而分子查询建立在原子查询之
上,提供清晰与重复利用。应用CTE也可以达到同样的目的。您可以将查询区域分割成可读
的“块”,然后用这些块建立一个复杂的查询。执行递归查询是CTE最重要也是最强大的功能。
建立CTE
CTE通过关键字WITH建立,其模板为:
 
WITH CTE_name[ (column_name [,...n] ) ]
AS
( CTE_query_specification )
如果在CTE定义中提到的栏名称是唯一的,那么您可以不必给它们命名。不过,您同样也可以对它
们重新命名。
下面的例子应用到SQL Server 2005中的AdventureWorks样本数据库。这个数据库被高度规格化,
因此需要几个连接来集合与雇员有关的信息。视图简化了这一操作,但也收集了所有有关雇员的信
息,而您可能仅仅需要其中一部分资料。
AdventureWorks的雇员数据分布在几个表中;而且,雇员与经理被存储在同一个表中
(),而他们的姓名(及其它数据),这
使得这个问题更加复杂。
首先,我们建立一个恢复雇员姓名的CTE。
 
WITH cte_Employee
AS
(
, , , ,
AS JobTitle, ,
e
INNER JOIN c ON =
)
然后,我们可从CTE中选择一栏或几栏,就像它是一个标准的表或视图。
接着我们再进一步。我们需要雇员和他们经理的姓名,于是我们使用CTE两次,把它自身连接起
来。下面是完整的查询代码: