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操作来创建表结构,一旦用户 ...
随机推荐
- UITextView ios7
UITextView *textView2 = [[UITextView alloc]initWithFrame:CGRectMake(, textView1.frame.size.height + ...
- 图像的影像地图超链接,<map>标签浅谈
在HTML中还可以把图片划分成多个热点区域,每一个热点域链接到不同网页的资源.这种效果的实质是把一幅图片划分为不同的热点区域,再让不同的区域进行超链接.这就是影像地图.要完成地图区域超链接要用到三种标 ...
- unity3d触屏操作对象运动
using UnityEngine; using System.Collections; public class robot : MonoBehaviour { private GameObject ...
- C#截图操作方法大全
using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApplication1 { class ScreenC ...
- 【移动开发】Android中WIFI开发总结(一)
WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热 ...
- Java基础知识强化84:System类之exit()方法和currentTimeMillis()方法
1. exit方法: public static void exit(int status): 终止当前正在运行的Java虚拟机.参数用作状态码:根据惯例,非0的状态码表示异常终止. 调用System ...
- 关于DOS下启动MySQL时提示服务名无效
主要原因:启动时:net start mysql 而打开服务后发现,本地服务中mysql这个服务实际名字为mysql55,故启动语句应为:net start mysql55: 以下摘自课程提问: 你 ...
- 关于安装PHP补装PDO与PDO_MYSQL操作
我这里是通过PHP源码包来安装的 1.安装pdo cd到你的PHP源码包下的ext/pdo目录,然后执行如下操作: #/usr/local/php/bin/phpize (/usr/local/p ...
- Lesson 4: Know Your Tools
Lesson 4: Know Your Tools "差劲的人
- JAVA泛型那些事儿
本篇内容源于本人一个好友sgpro提供的java学习例子,现拿出来给大家分享. 此例子非常直观的通过代码讲解了java泛型的用法和好处,是笔者一直珍藏的最好的泛型学习笔记. 一.面向过程的时代 我们先 ...