SQL with as 替代临时表的用法
原文地址:http://www.cnblogs.com/zerocc/archive/2011/11/28/2266180.html
SQL中 WITH AS 的用法和注意事项
1.为什么使用with as
我们在使用sql语句的时候经常使用子查询,但是子查询占用系统的资源是很多了,如果用在了循环中更是可怕,当然我们可以使用表量函数,但是标量函数的成本还是否不小,所以sql2005给我们提供了一个表达式 with as
使用with as应该注意
1 with as后面必须紧跟使用CTE(Common table Express) (with as)的语句
with a as
(
select * from tb1
)
select * from tb2,a where a.id=tb1.id
2 多个CTE 之间加,分割
with t1 as
(
select * from t1
),
t2 as
(
select * from t2
),
t3 as
(
select * from t3
)
3 如果CTE 和某个表重名则第一个使用cte 后面的就是使用了表
--table1 数据库中有table1
with table1 as
(
select * from tb1
)
select * from tb2,table1 where tb1.id=table1.id --CTE
select * from tb2,table1 where tb1.id=table1.id --table1
4 如果CTE属于批处理的一部分,那么用;和批处理分割
declare @t1 int
set @t1=2
;
with t as
(
select * from table1
)
select * from tb2 ,t where tb2.id=t.id
今天又学到了With
With 除了有上面提到的功能以为,With 还有以下的功能
1 递归调用
假如,有一个父子关系的表结构,就拿员工表吧,EmployeeID,ReportTO ,FirstName,LastName,其中ReportTO保存着当前记录的直接上级
那么我们怎么才能查询出给定一个人的下级(所有下级),答案是使用With递归
with Emp as
(
select EmployeeID,ReportTo,FirstName,LastName
from Employees where Employee=4
Join All
select emp.EmployeeID,emp.ReportTo,emp.FirstName,emp.LastName
from Employees emp
join Emp
on Emp.EmployeeID=emp.ReportTo
)
select * from Emp
在With中第一个是锚点,就是从那里开始,第二个循环是递归的主体,知道查询结果为空就结束,这样我们就实现了我们的要求了
SQL with as 替代临时表的用法的更多相关文章
- SQL Server 中 with tmp 临时表的用法
SQL Server 中 with tmp 临时表的用法 ----------with临时表用法,有时候采用临时表比采用in的效率更高,避免了全表扫描. 实例中实现了查询普通题.大题.子题目的sql ...
- Mysql临时表的用法 - 51CTO.COM
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- SQL 表变量和临时表
SQL 表变量和临时表 表变量:存储在内存中,作用域是脚本的执行过程中,脚本执行完毕之后就会释放内存,适合短时间内存储数据量小的数据集. 优点:使用灵活,使用完之后立即释放,不占用物理存储空间 缺点: ...
- [SQL]SUTFF内置函数的用法 (删除指定长度的字符并在指定的起始点插入另一组字符)
STUFF 删除指定长度的字符并在指定的起始点插入另一组字符. 语法 STUFF ( character_expression , start , length , character_express ...
- SQL Server中的临时表和表变量
SQL Server中的临时表和表变量 作者:DrillChina出处:blog2008-07-08 10:05 在SQL Server的性能调优中,有一个不可比拟的问题:那就是如何在一段需要长时间的 ...
- SQL语句中 INNER JOIN的用法!
一.SQL语句中 INNER JOIN的用法? 1.INNER JOIN的作用? 可以在两个或者更多的表中获取结果,得出一张新表. [隐式内连接] 表一 car 购物车 表二 user 用户 发现 ...
- SQL表变量与临时表区别 + 非游标临时表遍历
SQL表变量与临时表区别 + 非游标临时表遍历 分类: SQL Server2009-11-27 17:01 1196人阅读 评论(2) 收藏 举报 sqlinsert存储sql servermicr ...
- SQL中的LIKE语句的用法
SQL中的LIKE语句的用法 内容 在SQL结构化查询语言中,LIKE语句有着至关重要的作用.LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串), ...
- sql server中的临时表、表变量和公用表表达式
在编写T-SQL语句的时候,SQL Server提供了三种方法临时存储某些结果集,分别是临时表.表变量和公用表表达式. 临时表 临时表需要在临时数据库TempDB中通过I/O操作来创建表结构,一旦用户 ...
随机推荐
- linux怎么给一个普通用户reboot权限?
分四种情况讨论:1.让任何人(包括根本不拥有系统帐号的人)都可以通过控制台reboot在/etc/inittab文件中保留ca::ctrlaltdel:/sbin/shutdown -t3 -r no ...
- Java 编程的动态性,第3部分: 应用反射--转载
在 上个月的文章中,我介绍了Java Reflection API,并简要地讲述了它的一些基本功能.我还仔细研究了反射的性能,并且在文章的最后给出了一些指导方针,告诉读者在一个应用程序中何时应该使用反 ...
- [转] GDB attach
转:http://blog.csdn.net/wangeen/article/details/14230171 attach是GDB一种重要的debug模式,在MPI程序debug中发挥重要的作用. ...
- (转)background-position—CSS设置背景图片的位置
background-position :在 CSS 中通过 background-position 属性可以调整背景图片的位置.因为在默认情况下背景图片都是从设置了 background-posit ...
- C#判断程序是否以管理员身份运行,否则以管理员身份重新打开
/// <summary> /// 判断程序是否是以管理员身份运行. /// </summary> public static bool IsRunAsAdmin() { Wi ...
- myql查询创建表语句SHOW CREATE TABLE table_name
技术背景:刚开始学习MySQL时候,有时偷懒,会用SHOW CREATE TABLE 表名\G来复制表创建语句,可是当运行的时候总会因为"表名和列名上有单引号",提示语法错误不能运 ...
- 遍历std::list过程中删除元素后继续遍历过程
std::list::erase Erase elements Removes from the list container either a single element (position) o ...
- js 浏览器版本检测
整理了一下浏览器检测的js脚本 分享给大家 浏览器检测一般都是在网页打开的时候执行 使用js的闭包来实现页面加载以后执行的脚本 (function(){ //页面加载后执行的脚本 })() ; 检测浏 ...
- 认识cocos2d-x jsbinding
近年来HTML5风起云涌,特别在移动端已经被更多的人熟识.H5跨平台,在线更新等特性,被人们津津乐道.然后就出现了各种H5的框架,甚至多达100种,真是让开发者眼花缭乱,笔者作为一个从事H5游戏开发一 ...
- 【行为型】Chain of responsibility模式
职责链模式将对象的请求处理组成链式结构,并将请求按链式结构逐个传递下去,直接被其中的某个处理者处理为止.由此可知,职责链模式的适用场合是对指定请求,可以有多个请求处理者(或称为请求响应者),但用户并不 ...