- 浏览: 1884542 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
先看下面一个嵌套的查询语句:
select * from person.StateProvince where CountryRegionCode in (select CountryRegionCode from person.CountryRegion where Name like 'C%')
上面的查询语句使用了一个子查询。虽然这条SQL语句并不复杂,但如果嵌套的层次过多,会使SQL语句非常难以阅读和维护。因此,也可以使用表变量的方式来解决这个问题,SQL语句如下:
declare @t table(CountryRegionCode nvarchar(3)) insert into @t(CountryRegionCode) (select CountryRegionCode from person.CountryRegion where Name like 'C%') select * from person.StateProvince where CountryRegionCode in (select * from @t)
虽然上面的SQL语句要比第一种方式更复杂,但却将子查询放在了表变量@t中,这样做将使SQL语句更容易维护,但又会带来另一个问题,就是性能的损失。由于表变量实际上使用了临时表,从而增加了额外的I/O开销,因此,表变量的方式并不太适合数据量大且频繁查询的情况。为此,在SQL Server 2005中提供了另外一种解决方案,这就是公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性,同时,CTE要比表变量的效率高得多。
下面是CTE的语法:
[ WITH <common_table_expression> [ ,n ] ] <common_table_expression>::= expression_name [ ( column_name [ ,n ] ) ] AS ( CTE_query_definition )
现在使用CTE来解决上面的问题,SQL语句如下:
with cr as ( select CountryRegionCode from person.CountryRegion where Name like 'C%' ) select * from person.StateProvince where CountryRegionCode in (select * from cr)
其中cr是一个公用表表达式,该表达式在使用上与表变量类似,只是SQL Server 2005在处理公用表表达式的方式上有所不同。
在使用CTE时应注意如下几点:
1. CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将失效。如下面的SQL语句将无法正常使用CTE:
with cr as ( select CountryRegionCode from person.CountryRegion where Name like 'C%' ) select * from person.CountryRegion -- 应将这条SQL语句去掉
-- 使用CTE的SQL语句应紧跟在相关的CTE后面 --
select * from person.StateProvince where CountryRegionCode in (select * from cr)
2. CTE后面也可以跟其他的CTE,但只能使用一个with,多个CTE中间用逗号(,)分隔,如下面的SQL语句所示:
with cte1 as ( select * from table1 where name like 'abc%' ), cte2 as ( select * from table2 where id > 20 ), cte3 as ( select * from table3 where price < 100 ) select a.* from cte1 a, cte2 b, cte3 c where a.id = b.id and a.id = c.id
3. 如果CTE的表达式名称与某个数据表或视图重名,则紧跟在该CTE后面的SQL语句使用的仍然是CTE,当然,后面的SQL语句使用的就是数据表或视图了,如下面的SQL语句所示:
-- table1是一个实际存在的表
with table1 as ( select * from persons where age < 30 ) select * from table1 -- 使用了名为table1的公共表表达式 select * from table1 -- 使用了名为table1的数据表
4. CTE 可以引用自身,也可以引用在同一 WITH 子句中预先定义的 CTE。不允许前向引用。
5. 不能在 CTE_query_definition 中使用以下子句:
(1)COMPUTE 或 COMPUTE BY
(2)ORDER BY(除非指定了 TOP 子句)
(3)INTO
(4)带有查询提示的 OPTION 子句
(5)FOR XML
(6)FOR BROWSE
6. 如果将 CTE 用在属于批处理的一部分的语句中,那么在它之前的语句必须以分号结尾,如下面的SQL所示:
declare @s nvarchar(3) set @s = 'C%' ; -- 必须加分号 with t_tree as ( select CountryRegionCode from person.CountryRegion where Name like @s ) select * from person.StateProvince where CountryRegionCode in (select * from t_tree)
CTE除了可以简化嵌套SQL语句外,还可以进行递归调用,关于这一部分的内容将在下一篇文章中介绍。
公用表表达式(CTE)的递归调用
http://blog.csdn.net/zzuyongp/archive/2009/05/11/4164951.aspx
四个排名函数
http://blog.csdn.net/zzuyongp/archive/2009/05/11/4164891.aspx
发表评论
-
ORACLE中使用递归查询 (
2012-12-27 16:35 987在数据库查询中常常会碰到要查询树形结构的数据,需要用一个字段的 ... -
函数与存储过程区别
2011-06-01 18:17 1324本质上没区别。只是 ... -
SQL Server2000安装常见问题
2011-05-25 14:15 1498一:解决安装sql时文件挂起的问题: (1)、点击“开始》运 ... -
MySQL语句优化的原则
2011-04-12 14:21 10041、使用索引来更快 ... -
转SQL-group by学习
2011-04-12 14:18 1277在select 语句中可以使用group by 子句将行划分成 ... -
SQL Select语句完整的执行顺序:
2011-04-12 14:15 1406SQL Select语句完整的执行顺序: 1、from子句组 ... -
SQL截取字符串(substring与patindex的使用)
2011-03-31 13:55 5717SQL截取字符串(substring与patinde ... -
SQL CHARINDEX (Transact-SQL)
2010-12-06 09:05 1488返回字符串中指定表达式的开始位置。 Transact-SQ ... -
SQL Server基本函数
2010-12-06 08:53 1618SQL Server基本函数 1.字符串函数 : ... -
SQL2005级联删除,层叠,设置空,设置默认值
2010-12-01 15:46 2453浅谈SQL SERVER 2005 之引用 ... -
sql 显示插入主键
2010-10-22 16:28 1311set identity_insert [T_ADMINTYP ... -
取小数
2010-10-22 16:12 1309使用这个方式来计算 SELECT convert(decima ... -
oracle 创建表空间
2010-10-12 11:28 1539一.创建表空间 CREATE SMALLFILE TABLES ... -
sql 约束大全
2010-09-27 16:28 1370--------添加主键约束(bookid作为主键) alt ... -
sql 主外键语法
2010-09-27 08:39 1744alter table dbo.t_commAtta ... -
在SQL Server中,关于with as使用介绍
2010-09-26 13:32 36097一.WITH AS的含义 ... -
procedure 存储过程多个返回测试
2010-09-01 10:26 1194create procedure test(@temp1 va ... -
sql 实现按月份,季度统计报表
2010-08-30 12:01 14979呵呵,我们在处理设计到日期统计时候经常会按照年度,季度,月份统 ... -
SQL Server DATEPART() 不能言
2010-08-30 11:29 1833今天做按月份,按年度,按季度统计报表,后来发现了最简单最可扩展 ... -
SQL 统计
2010-08-30 11:16 1467该死的mysql没有提供unix时间戳的专门处理函数,所以,如 ...
相关推荐
SQL Server 2005 中使用公用表表达式(CTE)简化嵌套 SQL SQL Server 2005 中的公用表表达式(CTE)是一种强大的工具,可以简化嵌套的 SQL 语句,提高代码的可维护性和性能。本文将介绍 CTE 的基本概念、语法和使用...
"SQL Server 2005 杂谈:公用表表达式(CTE)的递归调用" 本文主要介绍了 SQL Server 2005 中公用表表达式(CTE)的递归调用,用于解决树型结构数据的查询问题。CTE 是 SQL Server 2005 中的一种新的查询方式,它...
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于...
5.2 公用表表达式(CTE) 5.3 视图 5.4 内联表值函数 5.5 APPLY运算符 5.6 总结 5.7 练习 5.8 解决方案 第6章 集合运算 6.1 UNION(并集)集合运算 6.2 INTERSECT(交集)集合运算 6.3 EXCEPT...
SQL Server中的公用表表达式(CTE,Common Table Expression)是一种强大的工具,它允许你在复杂的查询中定义一个临时的结果集,这个结果集可以被查询本身多次引用。CTE的使用非常灵活,尤其在处理递归关系时表现得...
5.2 公用表表达式(CTE) 5.3 视图 5.4 内联表值函数 5.5 APPLY运算符 5.6 总结 5.7 练习 5.8 解决方案 第6章 集合运算 6.1 UNION(并集)集合运算 6.2 INTERSECT(交集)集合运算 ...
SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它。每个CTE仅被定义一次(但在其作用域内可以被引用任意...
SQL Server 2005对T-SQL进行了扩展,添加了新的语法元素和函数,如窗口函数(OVER子句)、公用表表达式(CTE)、递归查询以及WITH关键字。这些功能使得复杂的数据处理和分析变得更加高效。 2. **存储过程和触发器*...
本文实例讲述了mysql8 公用表表达式CTE的使用方法。分享给大家供大家参考,具体如下: 公用表表达式CTE就是命名的临时结果集,作用范围是当前语句。 说白点你可以理解成一个可以复用的子查询,当然跟子查询还是有点...
在SQL Server中,公用表表达式(Common Table Expression,简称CTE)是一种非常有用的查询构造,它可以临时定义一个结果集,然后在后续的查询中重复使用。CTE的一个强大特性是支持递归,这意味着它可以在自身的基础...
- **表表达式**:探讨CTE(公用表表达式)和派生表的概念及其应用场景。 - **排名函数**:学习使用ROW_NUMBER()、RANK()等函数来进行数据排序和分组。 - **数据聚合**:掌握GROUP BY、HAVING子句以及聚合函数如...
1. **T-SQL增强**:SQL Server 2005引入了新的T-SQL语言特性,如Cursors的改进、窗口函数、 Common Table Expressions (CTE)、Table Value Parameters 和 PIVOT/UNPIVOT操作等,使得查询编写更为灵活和强大。...
5.2 公用表表达式(CTE) 5.3 视图 5.4 内联表值函数 5.5 APPLY运算符 5.6 总结 5.7 练习 5.8 解决方案 第6章 集合运算 6.1 UNION(并集)集合运算 6.2 INTERSECT(交集)集合运算 6.3 EXCEPT(差集)...
2. **Transact-SQL (T-SQL)增强**:SQL Server 2005扩展了T-SQL语言,增加了新的函数、操作符和语句,如窗口函数、公用表表达式(CTE)和嵌套触发器,提高了开发人员编写复杂查询的灵活性。 3. **Integration ...
在 SQL Server 2005 中,使用公共表表达式(Common Table Expression, CTE)实现递归是一种高效且直观的方式。递归 CTE 通常由两部分构成:定位成员(Anchor Member, AM)和递归成员(Recursive Member, RM)。 1. ...
公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。 CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。 与派生表的不同之处...
SQL Server 2005 Beta 2带来了对Transact-SQL的显著增强,这些改进主要集中在提升查询表达能力、数据完整性(DRI)支持、性能优化以及错误处理方面。以下是对这些增强功能的详细说明: 1. **排序函数**: SQL ...