本节讨论的相关内容包括:视图、派生表、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) 最大递归次数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2012-08-01 System.Web.HttpContext.Server.MapPath()