`
ljzforever
  • 浏览: 117528 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

sql server2005的公式表表达式(cte)

    博客分类:
  • sql
阅读更多
这是sql2005新增的语法,是为了更好的解决复杂查询中的性能问题,是来代替临时表和表变量的:
WITH
a AS
(
SELECT * FROM sysobjects
)
select * from a

在上面,
WITH
a AS
(
SELECT * FROM sysobjects
)
表示将SELECT * FROM sysobjects查出的结果放到a中
select * from a表示从上一个查询结果中作筛选

上面这只是个小例子,最常用的地方是递归查询
比如有这样的一张表:
tab_data
id    node_name   parent_id
1      辽宁省        0
2      湖北省        0
3      沈阳市        1
4      大连市        1
5      武汉市        2
6      仙桃市        2
7      大东区        4
8      沈河区        4
9      铁西区        4
10     青山区        5
11     武昌区        5
一张典形的树形表,如果想查辽宁省的资料,怎么查?
如果还用Sql2000的语法,就会很复杂,游标,临表等,但是用新的语法,就很简单:
with
data as
(
   select * from tab_data where id=1
   union all
   select tab_data.* from tab_data,data where tab_data.parent_id=data.id
)
select * from data

其中:select * from tab_data where id=1
是查出辽宁省的资料,查出第一个结果集
select tab_data.* from tab_data,data where tab_data.parent_id=data.id
是会根据从上一个查询结果集中获得的id值来查询parent_id字段的值
union all
会不断的把查出的结果集合并,
后面的一个查询会自己不断的循环执行,对表中的还没有进入前面结果集的数据集再进行一次查询,然后不断的与前面的结果集合并,直到查不出结果,就停止执行,最终data结果集就是最终的结果集,然后用:
select * from data查出全部

有人会问:后面的一个查询为什么会自己循环执行,我的理解是:这就是语法,没有为什么,等我用的很熟了,再来研究这是为什么吧~

这里有几篇很好的介绍的文章:
http://www.blogjava.net/nokiaguy/archive/2009/nokiaguy/archive/2009/nokiaguy/archive/2009/01/31/252787.html
http://www.blogjava.net/nokiaguy/archive/2009/02/01/252890.html
http://www.cnblogs.com/aierong/archive/2008/07/31/1257250.html
分享到:
评论

相关推荐

    [sql server]SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用.doc

    "SQL Server 2005 杂谈:公用表表达式(CTE)的递归调用" 本文主要介绍了 SQL Server 2005 中公用表表达式(CTE)的递归调用,用于解决树型结构数据的查询问题。CTE 是 SQL Server 2005 中的一种新的查询方式,它...

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

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

    SQL Server 公用表表达式(CTE)实现递归的方法

    SQL Server中的公用表表达式(CTE,Common Table Expression)是一种强大的工具,它允许你在复杂的查询中定义一个临时的结果集,这个结果集可以被查询本身多次引用。CTE的使用非常灵活,尤其在处理递归关系时表现得...

    sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成连续数字和日期

    在SQL Server中,公用表表达式(Common Table Expression,简称CTE)是一种非常有用的查询构造,它可以临时定义一个结果集,然后在后续的查询中重复使用。CTE的一个强大特性是支持递归,这意味着它可以在自身的基础...

    SqlServer使用公用表表达式(CTE)实现无限级树形构建

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它。每个CTE仅被定义一次(但在其作用域内可以被引用任意...

    sql server 2005脚本

    SQL Server 2005对T-SQL进行了扩展,添加了新的语法元素和函数,如窗口函数(OVER子句)、公用表表达式(CTE)、递归查询以及WITH关键字。这些功能使得复杂的数据处理和分析变得更加高效。 2. **存储过程和触发器*...

    sqlserver 2005 使用CTE 实现递归

    在 SQL Server 2005 中,使用公共表表达式(Common Table Expression, CTE)实现递归是一种高效且直观的方式。递归 CTE 通常由两部分构成:定位成员(Anchor Member, AM)和递归成员(Recursive Member, RM)。 1. ...

    SQL2005查询工具 SQLServer2005_SSMSEE

    1. **T-SQL增强**:SQL Server 2005引入了新的T-SQL语言特性,如Cursors的改进、窗口函数、 Common Table Expressions (CTE)、Table Value Parameters 和 PIVOT/UNPIVOT操作等,使得查询编写更为灵活和强大。...

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

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

    Pro SQL Server 2005 (2006)

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

    SQL SERVER 2005 简介

    SQL SERVER 2005 简介 SQL Server 2005 是一个全新的数据库平台系统,包含多种软件元件与服务,来满足企业对于日渐复杂的数据系统的需求。该版本的T-SQL结构化查询语言大幅扩增了新的查询指令,例如XQuery、取得...

    SQL SERVER的CTE用法

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

    sql server2005教程

    SQL Server 2005增加了窗口函数、CTE(公共表表达式)和自定义类型等新特性,使开发者能够编写更复杂的查询和存储过程。 四、集成服务(Integration Services) SSIS是SQL Server 2005的数据集成解决方案,用于数据...

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

    本书是Inside Microsoft SQL Server ...第4章 子查询、表表达式和排名函数 第5章 联接和集合操作 第6章 聚合和旋转数据 第7章 TOP和ALLPY 第8章 数据修改 第9章 图、树、层次结构和递归查询 附录A 逻辑难题 索引

    SQL SERVER 2005 新增的几个小功能

    ### SQL Server 2005新增的小功能详解 #### 一、分页查询数据 在SQL Server 2005之前,实现分页查询通常较为复杂且效率不高。随着SQL Server 2005的发布,引入了一种更为简便的方式来实现分页查询,即通过`ROW_...

    SQL Server2005分页查询

    - `CTE`(公共表表达式)方法: ```sql WITH OrderedResults AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY Namec) as RowNumber FROM dbo.mem_member ) SELECT * FROM OrderedResults WHERE RowNumber ...

    SqlServer2005课件

    Transact-SQL在Sql Server 2005中得到进一步扩展,支持窗口函数、公用表表达式(CTE)、并行查询等高级特性。这些功能让复杂的查询和分析变得更加便捷。 五、索引与查询优化 索引是提升查询速度的关键。Sql Server ...

Global site tag (gtag.js) - Google Analytics