原文地址: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中第一个是锚点,就是从那里开始,第二个循环是递归的主体,知道查询结果为空就结束,这样我们就实现了我们的要求了

最新文章

  1. 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之序列化
  2. js组件之间的通信
  3. Show in Finder OC代码
  4. 创建,增加,删除mysql表分区
  5. POJ 1488 Tex Quotes --- 水题
  6. oracle服务、客户端 plsql配置
  7. vb6.0如何让窗体跟随鼠标运动
  8. 【转】Oracle - 数据库的实例、表空间、用户、表之间关系
  9. 安装db2 提示不是有效的win32应用程序?
  10. 高效线程池之无锁化实现(Linux C)
  11. 使用GCD的dispatch_once创建单例
  12. iOS 提示音播放
  13. 一位月薪1.2w的北漂程序员真实生活!
  14. python定时脚本判断服务器内存
  15. 如何在Maven官网下载历史版本
  16. 利用Eric+Qt Designer编写倒计时时钟
  17. linux day4
  18. alpha七天冲刺计划-第一天
  19. 【leetcode刷题笔记】Spiral Matrix
  20. 深入理解Java流机制(一)

热门文章

  1. 《C专家编程》第一天
  2. php单例模式深入讲解
  3. 关于服务器防火墙和discuz论坛的问题
  4. DIV布局之道一:DIV块的水平并排、垂直并排
  5. Debugging Failed Because Integrated Windows Authentication Is Not Enabled
  6. 静默安装ORACLE【weber出品必属精品】
  7. 3.2 GUN as汇编(本文内容大部分引用原文,非原创)
  8. 关于常用却忘记的css,jQuery
  9. asp.net 解决IE11下 From身份验证失效问题
  10. 关于ASP.NET MVC中的视图生成