数据库查询中使计划
民生视野 2021-08-24 17:44 字号: 大 中 小
通用表表达式(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的雇员数据分布在几个表中;而且,雇员与经理被存储在同一个表中(ployee),而他们的姓名(及其它数据)则存储在ntact表中,这使得这个问题更加复杂。 首先,我们建立一个恢复雇员姓名的CTE。 WITH cte_EmployeeAS(ployeeID, rstName, ddleName, stName,tle AS JobTitle, one, ployeeAS e INNER JOIN ntactAS c ON ntactID = ntactID)
然后,我们可从CTE中选择一栏或几栏,就像它是一个标准的表或视图。 接着我们再进一步。我们需要雇员和他们经理的姓名,于是我们使用CTE两次,把它自身连接起来。下面是完整的查询代码: WITH cte_EmployeeAS(ployeeID, rstName, ddleName, stName,tle AS JobTitle, one, ployeeAS eINNER JOIN ntactAS c ON ntactID = ntactID)SELECT rstName + \' \' stName Employee,rstName + \' \' stName ManagerFROMcte_Employee AS ELEFT OUTER JOIN cte_Employee AS MON nagerID = ployeeID
进入政府的债务管理和融资平台的建设过程中。 限制:不能在一个语句中建立两个CTE。 总结 CTE是SQL Server 2005的一项强大而灵活的功能。它使得SQL Server的可读性更强,更易于管理,降低了查询的复杂程度。如上所述,您可以在一个SQL Server语句中多次应用CTE。
积食消化不良怎么办昆明男科哪家好
西安治疗阳痿多少钱
-
-
文体恋结合有何不妥仅40成正果因一方放弃搭配
文体恋结合有何不妥?仅40%成正果因一方放弃事业据上海东方...
2020-06-06 | 民生视野
-
-
体育总局年全国体育消费总规模目标万亿搭配
体育总局:年全国体育消费总规模目标.万亿群众运动新华社北...
2020-06-01 | 民生视野
-
-
塞图巴尔vs里斯本竞技分析塞图巴尔主场难搭配
塞图巴尔vs里斯本竞技分析:塞图巴尔主场难敌里斯本北京时间...
2020-05-29 | 民生视野
-
-
龙亭区人大常委会主任周洪全带领北书店代表
龙亭区人大常委会主任周洪全带领北书店代表团人大代表督导...
2019-07-12 | 民生视野
-
-
省民政厅督查组莅眉督查民政重点工作执行情
省民政厅督查组莅眉督查民政重点工作执行情况7月27日,省民...
2019-07-11 | 民生视野
-
-
市殡仪服务处组织职工对园区入口路面进行修
市殡仪服务处组织职工对园区入口路面进行修缮??近日,市殡...
2019-07-07 | 民生视野