博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SQL Server】系统学习之一:表表达式
阅读量:6502 次
发布时间:2019-06-24

本文共 855 字,大约阅读时间需要 2 分钟。

本节讨论的相关内容包括:视图、派生表、CTE、内联表值函数

场景:如果要查询一组数据(例如聚合数据,也就是几个表聚合在一起的数据),这些数据并未在数据库中以表的形式存在。

1、视图:通常用来分解大型的查询。使查询更容易,无需在临时表中复制或者存储数据。视图存于数据库,适用于所有批处理的数据库对象。不适用于单个T-SQL的批处理。

create view myview 

as

select ......

2、派生表(内联视图) 

select ....

from(select .....) as a

 

完全虚拟,优化器不会为它生成单独的计划。经过编译,会合并外部查询和内部查询。不会是性能降低或提高。

 

出现多引用时比较麻烦,需要多次重复定义、多次查询。

 

不允许使用order by(除非和top一起使用)

 

派生表不能使相关的(where 外部查询表.a=内部查询表.a)[除了apply]

 

3、CTE

可定义多个

with c1 as

()

c2 as

()

 

不可嵌套,但为了实现和嵌套派生表相同的效果,可以在c2中使用c1

 

多引用优势,在接下来的查询中,多次引用cte,替代派生表的重复定义,多次查询方案。 好处是写法简单,但是实质,仍然是重新组织查询,直接访问底层的对象。所以如果数据表中包含大量的行,此时应该考虑使用临时表或表变量,减少访问基础表的次数为一次。

 

很重要的一个用处:递归

with emp as

(

select empid,empname ,mgrid from employees where empid=5

union all

select empid,empname ,mgrid from employees as em

join emp on emp.mgrid=em.empid

)

select * from emp

 

option (maxrecursion 2) 最大递归次数

转载于:https://www.cnblogs.com/xyang/p/3885577.html

你可能感兴趣的文章
实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求
查看>>
安德鲁斯----多媒体编程
查看>>
swift版的元组
查看>>
[zz]在linux中出现there are stopped jobs 的解决方法
查看>>
Delphi下实现全屏快速找图找色 一、数据提取
查看>>
查询表字段信息
查看>>
logback与Log4J的区别
查看>>
关于机器学习的最佳科普文章:《从机器学习谈起》
查看>>
咏南新CS三层开发框架
查看>>
dxFlowChart运行时调出编辑器
查看>>
TDiocpCoderTcpServer返回数据记录有条数限制的问题
查看>>
NET Framework 3.0 (WinFX) RTM发布
查看>>
图片拼接器
查看>>
C++ TinyXml操作(含源码下载)
查看>>
读取swf里所有类定义
查看>>
DOWNLOAD 文件
查看>>
rp2833 网卡以及串口与接插件位置关系
查看>>
ogre场景图与场景内容分离
查看>>
中断小笔记
查看>>
C#委托、事件、消息(入门级)
查看>>