SQL Server2005数据库查询中使用CTE

张佳乐丶

张佳乐丶

2016-01-29 15:51

SQL Server2005数据库查询中使用CTE,SQL Server2005数据库查询中使用CTE

通用表表达式(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定义中提到的栏名称是唯一的,那么您可以不必给它们命名。不过,您同样也可以对它们重新命名。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

下面的例子应用到SQL Server 2005中的AdventureWorks样本数据库。这个数据库被高度规格化,因此需要几个连接来集合与雇员有关的信息。视图简化了这一操作,但也收集了所有有关雇员的信息,而您可能仅仅需要其中一部分资料。

AdventureWorks的雇员数据分布在几个表中;而且,雇员与经理被存储在同一个表中(HumanResources.Employee),而他们的姓名(及其它数据)则存储在Person.Contact表中,这使得这个问题更加复杂。

首先,我们建立一个恢复雇员姓名的CTE。

WITH cte_EmployeeAS(SELECTe.EmployeeID, c.FirstName, c.MiddleName, c.LastName,e.Title AS JobTitle, c.Phone, e.ManagerIDFROMHumanResources.EmployeeAS e INNER JOIN Person.ContactAS c ON c.ContactID = e.ContactID)

然后,我们可从CTE中选择一栏或几栏,就像它是一个标准的表或视图。

接着我们再进一步。我们需要雇员和他们经理的姓名,于是我们使用CTE两次,把它自身连接起来。下面是完整的查询代码:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

WITH cte_EmployeeAS(SELECTe.EmployeeID, c.FirstName, c.MiddleName, c.LastName,e.Title AS JobTitle, c.Phone, e.ManagerIDFROMHumanResources.EmployeeAS eINNER JOIN Person.ContactAS c ON c.ContactID = e.ContactID)SELECT E.FirstName + ' ' E.LastName Employee,M.FirstName + ' ' M.LastName ManagerFROMcte_Employee AS ELEFT OUTER JOIN cte_Employee AS MON E.ManagerID = M.EmployeeID

限制:不能在一个语句中建立两个CTE。

总结

CTE是SQL Server 2005的一项强大而灵活的功能。它使得SQL Server的可读性更强,更易于管理,降低了查询的复杂程度。如上所述,您可以在一个SQL Server语句中多次应用CTE。

展开更多 50%)
分享

猜你喜欢

SQL Server2005数据库查询中使用CTE

SQLServer
SQL Server2005数据库查询中使用CTE

SQL Server2005中用语句创建数据库和表

编程语言 网络编程
SQL Server2005中用语句创建数据库和表

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何使用SQL Server数据库嵌套子查询

SQLServer
如何使用SQL Server数据库嵌套子查询

SQL Server 2005数据库升级技巧

SQLServer
SQL Server 2005数据库升级技巧

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何使用SQL Server数据库查询累计值

SQLServer
如何使用SQL Server数据库查询累计值

SQL Server 2005中使用DDL触发器监控数据库变化

编程语言 网络编程
SQL Server 2005中使用DDL触发器监控数据库变化

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

升级到SQL Server 2005之后转换登录

升级到SQL Server 2005之后转换登录

限制系统管理员对SQL Server进行访问

限制系统管理员对SQL Server进行访问
下拉加载更多内容 ↓