数据库:SQLServer中with as 用法笔记

一、with as 概念介绍

with as 也叫做子查询部分(subquery factoring),可以定义一个SQL段落,该SQL段落可以被整个SQL语句所用到类似于临时表的作用。with as 可以提高你的SQL语句的可读性,也有可以用在在UNION ALL的不同部分,作为提供临时数据的部分。

二、with as 用途

with as对于UNION ALL查询语句非常有用。因为UNION ALL的每个查询部分可能相同,但是如果每个部分都去执行一遍的话,则查询成本很高,如果使用WITH AS段落查询,则只要执行一遍即可。如果with as段落所定义的表名被调用两次以上,则SQLServer会自动将with asS段落所获取的数据放入一个临时表里,如果只是被调用一次,则不会放到临时表里面。而提示materialize则是强制将WITH AS短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。

三、什么是CTE

CTE完整的描述是公用表表达式(Common Table Expression)是SQL SERVER 2005版本之后引入的一个新特性。CTE可以看作是一个临时的查询结果集,可以在接下来的一个SELECT,INSERT,UPDATE,DELETE,MERGESQL语句中被多次引用。使用公用表达式可以让SQL语句更加可读。、

四、CTE有下面四个优点:

1、可以定义递归公用表表达式(CTE)

2、当需要将查询结果集作为视图被多个地方引用时,CTE可以使SQL更加简洁

3、GROUP BY语句可以直接作用于子查询所得的标量列

4、可以在一个语句中多次引用公用表表达式(CTE)

五、CTE语法格式

with table1as(查询语句)select  * from table1示例:withtb1 as(    select name.age,address from person.T_user where name like 'a%')select * from tb1


六、CTE 注意事项

1、CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将查询结果失效。比如:

withtb1 as(    select name.age,address from person.T_user where name like 'a%')select * from T_userselect * from tb1  -- 查询将会失效

2、CTE后面也可以跟其他的CTE,但只能使用一个with,多个CTE中间用逗号(,)分隔。

with table1as(CTE_query_definition) , --用逗号分割table2  as(查询语句)...select  * from table1 ,table2

3. 如果CTE的表达式名称与某个数据表或视图重名,则紧跟在该CTE后面的SQL语句使用的仍然是CTE,后面的SQL语句使用的就是数据表或视图了。

withT_user as(    select * from T_user where name='小王')select * from T_user  -- 查询结果为T_user的公共表表达式select * from T_user  --  查询结果为T_user的数据表

4. CTE 可以引用自身,也可以引用在同一 WITH 子句中预先定义的 CTE。不允许前向引用。

with tb as(select * from T_user where id=2),tb2 as(select * from tb where id=2)select * from tb -- tb2 可以调用tb,不可以反向调用

5. 不能在 CTE_query_definition 中使用以下子句:

(1)COMPUTE 或 COMPUTE BY

(2)ORDER BY(除非指定了 TOP 子句)

(3)INTO

(4)带有查询提示的 OPTION 子句

(5)FOR XML

(6)FOR BROWSE

6. 如果将 CTE 用在属于批处理的一部分的语句中,那么在它之前的语句必须以分号结尾。

declare @s nvarchar(3)
set @1 = 100;  -- 必须加分号withtb1 as(    select name.age,address from person.T_user where name like 'a%')select * from tb1


以上是SQLServer中with as 用法介绍,希望能对大家有所 帮助,感兴趣的欢迎交流!

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库优化:SqlServer的with(nolock)关键字的用法介绍

一、with(nolock)的介绍数据库写查询语句的时候,为了提升查询性能,往往会在查询的表后面加一个nolock,或者是with(nolock),其目的就是查询的时候是不锁定表,从而提高查询速度的目的。但如果同一时间有多个用户访问同一资源的时候,如果并发用户对该资源做了修改。则会…

linux /root /etc,Linux知识:/root/.bashrc与/etc/profile的异同

要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是login shell 和non-login shell。交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是…

java多线程售票例子

代码如下: public class Ticket1 implements Runnable {private int tickets 100;Overridepublic void run() {while (tickets > 0) {synchronized (Ticket.class) {if (tickets > 0) {tickets--;System.out.println(Thread.currentThread().getName() "正在卖票&…

推荐一款免费国产远程办公神器ToDesk,TeamViewer完美替代品

对于从事IT行业的人员来说,远程软件基本上是必备的软件。之前使用用TeamViewer远程办公软件,它的稳定性、延迟低、功能齐全很受广大开发者的欢迎。唯一美中不足的是它是一款商业软件。费用比较高。到现在基本上所有破解工具都无效了。所以不得不放弃这款…

苹果台式电脑怎么开机_龙华苹果电脑回收公司,台式电脑回收公司电话

龙华苹果电脑回收公司,台式电脑回收公司电话oDYIHx 通常液晶显示器有VGA和DVI两种种接口,其中VGA接口在长时间显示后悔出现画面模糊情况,需要校正才能恢复,然而DVi接口传输就比较稳定,它属于全数字无损传输信号,在长…

AtomicInteger使用非阻塞算法,实现并发控制多线程实现售票

代码如下: public class TicketDemo implements Runnable {private static volatile AtomicInteger ticketSum new AtomicInteger(20);private static int finalTotal 0;Overridepublic void run() {int count;while ((count ticketSum.decrementAndGet()) > 0) {System.…

数据库:SQLServer 实现行转列、列转行用法笔记

在许多的互联网项目当中,报表开发是整个项目当中很重要的一个功能模块。其中会有一些比较复杂的报表统计需要行转列或者列转行的需求。今天给大家简单介绍一下在SQLServer当中如何使用PIVOT、UNPIVOT内置函数实现数据报表的行转列、列转行。有需要的朋友可以一起学习…

硬件知识:串口通讯的起始、数据、停止位是怎么分配的?

串口是串行接口(serial port)的简称,也称为串行通信接口或COM接口。串口通信是指采用串行通信协议(serial communication)在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式。串口按电气标准及协议来划分…

ES5 getter setter

最近在学习vuejs,了解到内部实现使用到了es5的Getters和Setters。之前看高程的时候,没有重视这块,今天查看一下文档,了解了他们的作用,再次记录一下,可供以后查看和共享。 定义Getters和Setters&#xff1a…

python 调用bat失败_要想顺利通过Python面试,你最起码需要达到白银段位!

近几年 Python 非常热门,在学术界和产业界的使用率显著提高。目前学习Python的人数日益增多,Python在近3年的编程语言受欢迎度中一直处于榜首。今天我们就来讲讲在产业界,需要具备哪些能力才能获得一个满意的 Python 相关岗位 Offer。Python基…

多线程售票demo,用ReentrantLock实现

代码: public class TicketReentLockDemo implements Runnable {private int ticketTotal 100;private Lock lock new ReentrantLock();Overridepublic void run() {while (ticketTotal > 0) {try {lock.lock();if (ticketTotal > 0) {try {TimeUnit.MILLISECONDS.sle…

数据库:SQLServer中in和 exists函数用法笔记

今天给大家分享一下SQLServer中in和 exists 用法,希望能对大家有所帮助。一、IN 用法确定指定的值是否与子查询或列表中的数据相匹配。1.1 语法格式test_expression [ NOT ] IN ( subquery | expression [ ,...n ] )1.2 参数说明test_expression为任意有…

什么是m叉树_不懂数据库索引的底层原理?那是因为你心里没点b树

前几天下班回到家后正在处理一个白天没解决的bug,厕所突然传来对象的声音: 对象:xx,你有《时间简史》吗? 我:我去!妹子,你这啥癖好啊,我有时间也不会去捡屎啊&#xff01…

可重入锁是什么和demo

可重入锁 reentrantlock是独占锁且可重入的 synchronized 也可以重入 可重入意思就是这个线程已经获取锁了,你再获取该锁还能获取 获取的还是原来的锁 不会出现问题 可以降低编程难度 代码如下: new Thread(new Runnable() {Overridepublic void run() {synchr…

linux 安装python 3.x,Linux 安装python3.x步骤

本文转发自博客园非真的文章,内容略有改动linux系统本身默认安装有2.x版本的python,版本x根据不同版本系统有所不同,通过python --V 或 python --version 查看系统自带的python版本。有一些系统命令时需要用到python2,不能卸载&am…

数据库:SQLServer中游标的用法笔记

一、游标的概念知识游标可以理解为SQL Server的一种数据访问机制,它允许用户访问数据的维度是数据行。用户可以对每一行数据进行单独处理,从而降低系统开销和潜在的阻隔情况,游标主要用于存储过程,触发器和 T_SQL复杂的脚本中&…

BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id1009 字符串全部由0~9组成,给出一个串s,求一个长度为n的串,不包含s的种类有多少. 分析 第一眼以为是组合.然后更滑稽的是用错误的方法手算样例居然算出来是对的...我数学是有多差... 题解也是看了好半天,有点难理解. 感觉…

智慧政务解决方案(28页)pdf_【金众电子】智慧政务解决方案

智慧政务解决方案立式党建广告机广告机简介:KC-立式政务广告机(室内/室外可选)液晶屏幕特别卖点:安装简易、亮度调节、实时更新、传输安全应用场所:各种需要文化传播的政务机构、政府机关、会议场所等。双立柱政务文化栏/宣传栏文化栏简介&am…

笨办法学linux dhcp,了解网关、DNS、子网掩码、MAC地址、DHCP

原标题:了解网关、DNS、子网掩码、MAC地址、DHCP什么是网关、DNS、子网掩码,它有什么作用,确实,我们平时在网络中总是在不断的提到网关,却很少真正的去了解它。一、什么是网关1、什么是网关网关是一种充当转换重任的计…

数据库:SQLServer Stuff 函数用法笔记

今天小编给大家分享一下自己整理一下SQLServer Stuff函数用法技巧和常用示例,有需要的朋友可以学习一下。一、Stuff函数的作用1.1官方解释STUFF 函数将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插…