`
buliedian
  • 浏览: 1238391 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SQL Server2005数据库查询中使用CTE

 
阅读更多

转自: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。


分享到:
评论

相关推荐

    SQL2005查询工具 SQLServer2005_SSMSEE

    描述中提到的"简单安装SQL软件可以下载使用",意味着SQL Server 2005 SSMSEE的安装过程相对简单,用户只需下载`SQLServer2005_SSMSEE.msi`这个安装文件,按照向导指示即可完成安装。安装后,用户无需复杂的配置就能...

    [sql server] SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL

    SQL Server 2005 中使用公用表表达式(CTE)简化嵌套 SQL SQL Server 2005 中的公用表表达式(CTE)是一种强大的工具,可以简化嵌套的 SQL 语句,提高代码的可维护性和性能。本文将介绍 CTE 的基本概念、语法和使用...

    SQL Server 2016 数据库应用实战(1).zip

    2. **T-SQL扩展**:SQL Server 2016支持T-SQL(Transact-SQL)扩展,如窗口函数、 Common Table Expressions (CTE)、PIVOT/UNPIVOT等高级查询技术,能更灵活地处理复杂数据问题。 3. **索引管理**:理解聚集索引与...

    数据库查询的题目及答案(SqlServer)

    以上就是关于SQL Server数据库查询的一些关键知识点。通过理解和掌握这些概念,你可以有效地进行数据检索、分析和管理。在实践中,根据具体的业务需求,你可能需要组合使用这些技术,以解决更复杂的问题。

    SQL Server 2005数据库技术与应用-教案

    SQL Server 2005是微软公司推出的一...通过这个教程,学习者将能够深入了解SQL Server 2005的各个方面,从而在实际工作中有效地设计、管理和维护SQL Server数据库,同时也为后续更高版本的SQL Server学习打下坚实基础。

    sqlserver驱动2012版

    标题中的“sqlserver驱动2012版”指的是SQL Server Native Client 2012,这是微软为SQL Server设计的一款数据库访问接口。SQL Server Native Client(简称SQLNCLI)是用于与SQL Server交互的一种客户端库,它包含了...

    sql server 2005脚本

    在SQL Server 2005中,视图可以更复杂,包括联接、聚合、子查询等,增强了数据的抽象和安全性。 4. **索引**: SQL Server 2005支持多种类型的索引,如聚集索引(Clustered Index)、非聚集索引(Non-Clustered ...

    SQL Server2005分页查询

    在SQL Server 2005中,分页查询是一个常见的需求,特别是在处理大量数据时,为了提高用户体验,通常需要一次性加载一定数量的数据,而不是一次性显示所有数据。以下将详细讲解SQL Server 2005中分页查询的常用方法。...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们...

    SQL Server 2005 Beta 2 Transact-SQL 增强功能

    SQL Server 2005 Beta 2带来了对Transact-SQL的显著增强,这些改进主要集中在提升查询表达能力、数据完整性(DRI)支持、性能优化以及错误处理方面。以下是对这些增强功能的详细说明: 1. **排序函数**: SQL ...

    SQL SERVER 2005 简介

    SQL Server 2005 的关系型数据库引擎是处理关系型数据库的核心元件,可以满足各类不同等级应用程序对于数据的储存、查询与变动的需求。此外,还提供了多种新的功能和强化,例如 DDL Trigger、数据分割、Native XML ...

    SQL SERVER的CTE用法

    在SQL Server中,公共表表达式(Common Table Expression,简称CTE)是一种非常有用的查询构造,它可以临时定义一个结果集,然后在这个结果集的基础上进行进一步的查询操作。CTE不仅可读性强,而且有助于简化复杂的...

    Pro SQL Server 2005 (2006)

    2. **Transact-SQL (T-SQL)增强**:SQL Server 2005扩展了T-SQL语言,增加了新的函数、操作符和语句,如窗口函数、公用表表达式(CTE)和嵌套触发器,提高了开发人员编写复杂查询的灵活性。 3. **Integration ...

    sql server2005教程

    在SQL Server 2005中,数据库的创建、维护和备份都有了新的工具支持。例如,使用SQL Server Management Studio (SSMS) 可以方便地进行数据库的设计、查询、备份和恢复。此外,SQL Server 2005还提供了对数据库镜像的...

    sql server 中如何增加递增的序号列【实用】

    这种方法使用 SQL Server 2005 独有的 ROW_NUMBER() OVER () 语法来生成递增的序号列,并使用 CTE 选取序号 2 ~ 4 的数据。例如: ```sql WITH 排序后的图书 AS( SELECT ROW_NUMBER() OVER (ORDER BY 客户编号 DESC...

    SqlServer数据库分页

    在SQL Server数据库中,分页是一种常见的数据检索技术,它允许我们从大量数据中按需获取一部分结果,而不是一次性加载所有记录。这在处理大型数据集时尤其有用,可以提高性能,减少网络传输,以及提供更好的用户体验...

    SQL Server CTE 递归查询全解1

    SQL Server中的递归查询主要通过CTE(公共表表达式)来实现,它是一种非常强大的工具,特别适用于处理层次结构数据。CTE是T-SQL脚本中的临时结果集,可以用于复杂的查询,尤其是需要递归操作的情况。本文将深入探讨...

    SQL Server 2012数据库T-SQL查询方法及实例解析.pdf

    Transact-SQL(通常称为T-SQL)是微软SQL Server数据库系统使用的SQL程序设计语言的增强版。它是与SQL Server数据库进行交互的主要语言,提供了包括事务控制、错误处理和可编程性在内的扩展功能,可以用来执行各种...

    SQL SERVER 2005 新增的几个小功能

    ### SQL Server 2005新增的小...SQL Server 2005的这些新特性极大地增强了数据库的灵活性和健壮性,使得开发人员能够更高效地管理和操作数据。通过采用这些新技术,不仅可以提高应用程序的性能,还能显著降低维护成本。

    使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法

    在SQL Server 2005和2008中,处理树型结构的数据时,递归公共表表达式(Recursive Common Table Expression, CTE)是一种非常实用的技术。本篇文章将详细解析如何使用递归CTE查询树型结构,并通过一个Family Tree的...

Global site tag (gtag.js) - Google Analytics