sqlserver 公有表达式
了解通用表达式:
为了让代码简洁:在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解,但是视图是系统级对象,如果数据集仅仅需要在存储过程或是自定义函数中使用一次的话,使用view有些奢侈哈
所以可以考虑用公用表达式:
可以看做是一个临时的结果集,可以在select ,insert,update,delete,merge语句中多次被引用
CTE:公用表达式
优点:group by语句可以直接作用于子查询所得的标量列
可以在一个语句中多次引用公用表达式
定义:
1公用表达式的名字在 with之后
2 一个select语句(在as之后)
3 所涉及的列名
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
按照是否递归:可以分为递归公用表达式和非递归公用表达式
1 非递归公用表达式
查询结果仅仅一次性返回一个结果集用于外部查询调用,并不在其定义的语句中调用其自身的CTE
例如:
WITH CTE_test
AS
(
SELECT *
FROM dbo.Customer AS c
) SELECT * FROM CTE_test
公用表达式的好处之一是可以在接下来的一条语句中多次引用
意思是只能在一条语句中多次引用,但是如果在不同的语句中则不能调用
但是如果需要在下面语句引用它,则需要重新定义它,如果需要定义多个,中间可以用逗号分隔
递归公用表达式:指得是在CTE内的语句调用其自身的CTE,CTE可以一次定义多次进行派生递归,
递归公有表达式:
需要实现两部分:
1 基本语句
2 递归语句
在sql中这两部分通过Union all连接结果集进行返回
递归遵循的法则:
sqlserer 提供了Option选项,可以设定最大的递归次数
WITH CTE_Customer(Id,NickName,VerifyStatus,Score)
AS
(
--基本语句
SELECT c.Id,c.Nickname,c.VerifyStatus,c.Score FROM Customer AS c WHERE c.AvatarId IS NULL
UNION ALL
--递归语句
SELECT u.Id,u.Nickname,u.VerifyStatus,u.Score FROM Customer AS u
INNER JOIN CTE_Customer cc
ON u.Id = cc.Id WHERE u.Id IN ()
) SELECT * FROM CTE_Customer
--限制递归次数
OPTION(MAXRECURSION )
sqlserver 公有表达式的更多相关文章
- SqlServer共用表达式(CTE)With As
共用表表达式(CTE)可以看成是一个临时的结果集,可以再SELECT,INSERT,UPDATE,DELETE,MARGE语句中多次引用. 一好处:使用共用表表达式可以让语句更加清晰简练. 1.可以定 ...
- SqlServer共用表达式(CTE)With As 处理递归查询
共用表表达式(CTE)可以看成是一个临时的结果集,可以再SELECT,INSERT,UPDATE,DELETE,MARGE语句中多次引用. 一好处:使用共用表表达式可以让语句更加清晰简练. 1.可以定 ...
- C# 递归构造树状数据结构(泛型),如何构造?如何查询?
十年河东,十年河西,莫欺少年穷. 学无止境,精益求精 难得有清闲的一上午,索性写篇博客. 首先,我们需要准备一张表,如下范例: create table TreeTable ( TreeId ) no ...
- 【SqlServer系列】表达式(expression)
1 概述 本篇这文章主要概述SqlServer表达式. 2 具体内容 2.1 使用范围 SQL Server(2008开始) :Azure SQL数据库:Azure SQL数据仓库:并行数 ...
- (转)top关键字与top表达式(SQLServer)
SQLServer 中,top也很有用,例如查询部分数据,还可以用表达式.其语法如下: SELECT TOP number|percent column_name(s) FROM table_name ...
- SqlServer:SqlServer(sql,游标,定时作业,行转列,列转行,公用表达式递归,merge合并)
1.加载驱动: Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); DriverManager.getCo ...
- SQLServer学习笔记<>日期和时间数据的处理(cast转化格式、日期截取、日期的加减)和 case表达式
日期和时间数据的处理. (1)字符串日期 ‘20080301’,这一串为字符串日期,但必须保证为四位的年份,两位的月份,两位的日期.例如,查询订单表日期大于‘20080301’.可以这样写: 1 se ...
- mssql sqlserver with cte表达式(递归)找出最顶值的方法分享
摘要: 下文通过递归的方式找出最顶级部门的方法分享,如下所示: 实验环境:sql server 2008 R2 下文通过cte-with表达式实现递归,获取一个公司的顶级部门,如下所示 例:部门表 c ...
- SQLServer中的CTE通用表表达式
开发人员正在研发的许多项目都涉及编写由基本的 SELECT/FROM/WHERE 类型的语句派生而来的复杂 SQL 语句.其中一种情形是需要编写在 FROM 子句内使用派生表(也称为内联视图)的 Tr ...
随机推荐
- OpenStack API 与 CloudStack API 模块比较
OpenStack API Block Storage Service API Compute API Compute API extensions Identity Service API and ...
- nginx缓存优先级(缓存问题者必看)
接触nginx的兄弟或多或少都有遇到缓存问题,要么是nginx为什么不缓存,要么就是nginx缓存很快就失效等等问题,在网上找了一遍nginx缓存优先级的文章,大家可以参考下. 架构图client端 ...
- 教你50招提升ASP.NET性能(十七):不要认为问题只会从业务层产生
(28)Don’t assume that problems can only arise from business logic 招数28: 不要认为问题只会从业务层产生 When beginnin ...
- Codeforces Round #334 (Div. 2) C. Alternative Thinking 贪心
C. Alternative Thinking Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/6 ...
- Codeforces Round #330 (Div. 2)D. Max and Bike 二分 物理
D. Max and Bike Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/595/probl ...
- HDU 4121 Xiangqi 模拟题
Xiangqi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4121 ...
- 【转】Delphi调用webservice总结
原文:http://www.cnblogs.com/zhangzhifeng/archive/2013/08/15/3259084.html Delphi调用C#写的webservice 用delph ...
- DashClock
https://github.com/romannurik/dashclock/ https://github.com/nhaarman/DashPinkpop dashclock-master.zi ...
- VVDocumenter - Xcod代码注释工具
刚接触IOS开发时,发现XCODE非常的强大的,后续的代码实践中发现XOCDE的代码文档注释非常的差, 每次都要用手敲,蛋疼至极: 随着不断学习发现XCODE有代码片段内嵌一说(如:for .bloc ...
- 开源 java CMS - FreeCMS2.3 Web页面信息採集
原文地址:http://javaz.cn/site/javaz/site_study/info/2015/23312.html 项目地址:http://www.freeteam.cn/ Web页面信息 ...