如何在SQLServer2005数据库查
通用表表达式(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 [而此次环保部开出的4.1亿元罚单中,...n] ) ]
AS
( CTE_query_specification )
如果在CTE定义中提到的栏名称是唯一的,那么您可以不必给它们命名。不过,您同样也可以对它们重新命名。
下面的例子应用到SQL Server 2005中的AdventureWorks样本数据库。这个数据库被高度规格化,因此需要几个连接来集合与雇员有关的信息。视图简化了这一操作,但也收集了所有有关雇员的信息,而您可能仅仅需要其中一部分资料。
AdventureWorks的雇员数据分布在几个表中;而且,雇员与经理被存储在同一个表中(ployee),而他们的姓名(及其它数据)则存储在ntact表中,这使得这个问题更加复杂。
首先,我们建立一个恢复雇员姓名的CTE。
WITH cte_Employee
AS
(
ployeeID, rstName, ddleName, stName,
tle AS JobTitle, one, nagerID
ployeeAS e
INNER JOIN ntactAS c ON ntactID = ntactID
)
然后,我们可从CTE中选择一栏或几栏,就像它是一个标准的表或视图。
接着我们再进一步。我们需要雇员和他们经理的姓名,于是我们使用CTE两次,把它自身连接起来。下面是完整的查询代码:
WITH cte_Employee
AS
(
ployeeID, rstName, ddleName, stName,
tle AS JobTitle, one, nagerID
ployeeAS e
INNER JOIN ntactAS c ON ntactID = ntactID
)
SELECT rstName + stName Employee,
rstName + stName Manager
FROMcte_Employee AS E
LEFT OUTER JOIN cte_Employee AS M
ON nagerID = ployeeID
限制:不能在一个语句中建立两个CTE。
总结
CTE是SQL Server 2005的一项强大而灵活的功能。它使得SQL Server的可读性更强,更易于管理,降低了查询的复杂程度。如上所述,您可以在一个SQL Server语句中多次应用CTE。
在下一篇文章中,我将说明如何应用这一功能来执行递归查询,如物料清单应用。
:张琎
查看本文国际来源
西藏白癜风医院有哪些漯河治疗白癜风好的医院淄博治疗白癜风好的医院-
经历了3次装修,我发现有8样家具全是“绣花枕头”,不实用性还贵
一个家美不美,完了全都跟着房东的美感来走,有些时候不是我们品位不好,...
2024-04-16
-
阿尔比奥尔:我们要让爱华顿暴露缺点 四强中最热门的是皇马
克里博:我们要让阿仙奴渗透到在技术上 四强之前最受欢迎的是阿森纳 电...
2024-03-18
-
高中学历,应该从什么简而言之提升自己的学历?
1.如果你年龄还小,高三、高中时教书,或者几天后初中部时毕业考虑要不让...
2024-02-01
-
真正有品味的女孩,夏天不会去穿这4件“衣服”,显廉价拉低档次
想要看一个女人有未现代人,看她的日常接送配就可以从前获知。值得注意是...
2024-01-02
-
紫色贝贝的穿搭太时髦了,精致、大气、得体,又不缺男孩子气
在在茶色贝贝在忙着紧接,而我却在这一次的come back里头小时候了joy的身着乘...
2024-01-01
-
蔚来与极地未来合作开发 COP15青年生物多样性科学探索
5同月22日,第22个亚太地区生命体多元性日在即,蔚来宣布与极地下一代就Cl...
2023-12-31