转自:http://www.615i.cn/article.asp?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的雇员数据分布在几个表中;而且,雇员与经理被存储在同一个表中(HumanResources.Employee),而他们的姓名(及其它数据)则存储在Person.Contact表中,这使得这个问题更加复杂。
首先,我们建立一个恢复雇员姓名的CTE。
WITH cte_Employee
AS
(
Selecte.EmployeeID, c.FirstName, c.MiddleName, c.LastName,
e.Title AS JobTitle, c.Phone, e.ManagerID
FROMHumanResources.EmployeeAS e
INNER JOIN Person.ContactAS c ON c.ContactID = e.ContactID
)
|
然后,我们可从CTE中选择一栏或几栏,就像它是一个标准的表或视图。
接着我们再进一步。我们需要雇员和他们经理的姓名,于是我们使用CTE两次,把它自身连接起来。下面是完整的查询代码:
WITH cte_Employee
AS
(
Selecte.EmployeeID, c.FirstName, c.MiddleName, c.LastName,
e.Title AS JobTitle, c.Phone, e.ManagerID
FROMHumanResources.EmployeeAS e
INNER JOIN Person.ContactAS c ON c.ContactID = e.ContactID
)
Select E.FirstName + ' ' E.LastName Employee,
M.FirstName + ' ' M.LastName Manager
FROMcte_Employee AS E
LEFT OUTER JOIN cte_Employee AS M
ON E.ManagerID = M.EmployeeID
|
限制:不能在一个语句中建立两个CTE。
总结
CTE是SQL Server 2005的一项强大而灵活的功能。它使得SQL Server的可读性更强,更易于管理,降低了查询的复杂程度。如上所述,您可以在一个SQL Server语句中多次应用CTE。
分享到:
相关推荐
描述中提到的"简单安装SQL软件可以下载使用",意味着SQL Server 2005 SSMSEE的安装过程相对简单,用户只需下载`SQLServer2005_SSMSEE.msi`这个安装文件,按照向导指示即可完成安装。安装后,用户无需复杂的配置就能...
SQL Server 2005 中使用公用表表达式(CTE)简化嵌套 SQL SQL Server 2005 中的公用表表达式(CTE)是一种强大的工具,可以简化嵌套的 SQL 语句,提高代码的可维护性和性能。本文将介绍 CTE 的基本概念、语法和使用...
2. **T-SQL扩展**:SQL Server 2016支持T-SQL(Transact-SQL)扩展,如窗口函数、 Common Table Expressions (CTE)、PIVOT/UNPIVOT等高级查询技术,能更灵活地处理复杂数据问题。 3. **索引管理**:理解聚集索引与...
以上就是关于SQL Server数据库查询的一些关键知识点。通过理解和掌握这些概念,你可以有效地进行数据检索、分析和管理。在实践中,根据具体的业务需求,你可能需要组合使用这些技术,以解决更复杂的问题。
SQL Server 2005是微软公司推出的一...通过这个教程,学习者将能够深入了解SQL Server 2005的各个方面,从而在实际工作中有效地设计、管理和维护SQL Server数据库,同时也为后续更高版本的SQL Server学习打下坚实基础。
标题中的“sqlserver驱动2012版”指的是SQL Server Native Client 2012,这是微软为SQL Server设计的一款数据库访问接口。SQL Server Native Client(简称SQLNCLI)是用于与SQL Server交互的一种客户端库,它包含了...
在SQL Server 2005中,视图可以更复杂,包括联接、聚合、子查询等,增强了数据的抽象和安全性。 4. **索引**: SQL Server 2005支持多种类型的索引,如聚集索引(Clustered Index)、非聚集索引(Non-Clustered ...
在SQL Server 2005中,分页查询是一个常见的需求,特别是在处理大量数据时,为了提高用户体验,通常需要一次性加载一定数量的数据,而不是一次性显示所有数据。以下将详细讲解SQL Server 2005中分页查询的常用方法。...
本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们...
SQL Server 2005 Beta 2带来了对Transact-SQL的显著增强,这些改进主要集中在提升查询表达能力、数据完整性(DRI)支持、性能优化以及错误处理方面。以下是对这些增强功能的详细说明: 1. **排序函数**: SQL ...
SQL Server 2005 的关系型数据库引擎是处理关系型数据库的核心元件,可以满足各类不同等级应用程序对于数据的储存、查询与变动的需求。此外,还提供了多种新的功能和强化,例如 DDL Trigger、数据分割、Native XML ...
在SQL Server中,公共表表达式(Common Table Expression,简称CTE)是一种非常有用的查询构造,它可以临时定义一个结果集,然后在这个结果集的基础上进行进一步的查询操作。CTE不仅可读性强,而且有助于简化复杂的...
2. **Transact-SQL (T-SQL)增强**:SQL Server 2005扩展了T-SQL语言,增加了新的函数、操作符和语句,如窗口函数、公用表表达式(CTE)和嵌套触发器,提高了开发人员编写复杂查询的灵活性。 3. **Integration ...
在SQL Server 2005中,数据库的创建、维护和备份都有了新的工具支持。例如,使用SQL Server Management Studio (SSMS) 可以方便地进行数据库的设计、查询、备份和恢复。此外,SQL Server 2005还提供了对数据库镜像的...
这种方法使用 SQL Server 2005 独有的 ROW_NUMBER() OVER () 语法来生成递增的序号列,并使用 CTE 选取序号 2 ~ 4 的数据。例如: ```sql WITH 排序后的图书 AS( SELECT ROW_NUMBER() OVER (ORDER BY 客户编号 DESC...
在SQL Server数据库中,分页是一种常见的数据检索技术,它允许我们从大量数据中按需获取一部分结果,而不是一次性加载所有记录。这在处理大型数据集时尤其有用,可以提高性能,减少网络传输,以及提供更好的用户体验...
SQL Server中的递归查询主要通过CTE(公共表表达式)来实现,它是一种非常强大的工具,特别适用于处理层次结构数据。CTE是T-SQL脚本中的临时结果集,可以用于复杂的查询,尤其是需要递归操作的情况。本文将深入探讨...
Transact-SQL(通常称为T-SQL)是微软SQL Server数据库系统使用的SQL程序设计语言的增强版。它是与SQL Server数据库进行交互的主要语言,提供了包括事务控制、错误处理和可编程性在内的扩展功能,可以用来执行各种...
### SQL Server 2005新增的小...SQL Server 2005的这些新特性极大地增强了数据库的灵活性和健壮性,使得开发人员能够更高效地管理和操作数据。通过采用这些新技术,不仅可以提高应用程序的性能,还能显著降低维护成本。
在SQL Server 2005和2008中,处理树型结构的数据时,递归公共表表达式(Recursive Common Table Expression, CTE)是一种非常实用的技术。本篇文章将详细解析如何使用递归CTE查询树型结构,并通过一个Family Tree的...