一、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及串口基础知识硬件:断路器、接触器、继电器基础知识

数据库:SQLServer中with as 用法笔记相关推荐

  1. 数据库 SQLServer中GUID用法介绍

    数据库 SQLServer中GUID用法介绍 1.NEWID用法 NEWID()作用是生成无顺序的GUID字符串.用法如下: SELECT NEWID() --生成36位的GUID SELECT RE ...

  2. SQLSERVER中的WITH用法

    SQLSERVER中的WITH用法 1.with的作用 相当于一个虚拟试图,说白了就是子查询部分 将SQL中重复使用的语句放在with as里面,后面你想用时就可以使用它 起到对大批量语句的优化作用 ...

  3. SQL数据库语句中escape的用法及含义

    SQL数据库语句中escape的用法及含义 escape是用来转译的 例如: 数据库中有个表 A字段abc 中存du了字符'%',那么我查询的时候如果只想查询第二位是 '%'的记录就需要进行模糊查询, ...

  4. SQLServer知识:sqlcmd用法笔记

    今天给大家介绍sqlcmd用法笔记,希望对大家能有所帮助! 1.介绍 sqlcmd是一个 Microsoft Win32 命令提示实用工具,可以通过该命令工具实现SQL语句.脚本的执行,并且可以实现脚 ...

  5. sqlserver中的常见函数用法

    今日碰到个问题:要实现数据表中的一个字段中的文本为"xxx.gif"的转换为"xxx.jpg",我不知道其具体名称,只知道是以gif结尾. 问题解决:updat ...

  6. SQLServer中Case的用法

    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> CASE 可能是 SQL ...

  7. 数据库-SQL中like的用法

    2019独角兽企业重金招聘Python工程师标准>>> 在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 whe ...

  8. js语句连接mysql数据库_js中require()的用法----JS如何连接数据库执行sql语句或者建立数据库连接池...

    var vue = require('vue'); 引入vue的意思,commonjs的写法.node都是用require来载入模块的,可以看看webpack+vue. require()可以调用模块 ...

  9. GUID基本概念以及C#、SqlServer中GUID基本用法

    全局唯一标识符(GUID,Globally Unique Identifier)是一种由特定算法生成的二进制长度为128位的数字标识符.在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID ...

  10. JAVA中request.getParameterMap()用法笔记

    一. 根据Java规范:request.getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系.这个返回值有个特别 ...

最新文章

  1. python 类和函数的区别
  2. Oracle 11g Dataguard 物理备库配置(一)之Duplicate配置
  3. sqlserver的四种分页方式
  4. 技嘉主板万能网卡驱动_技嘉Z490系列主板来袭:16相供电/钽电容,堆料更进一步...
  5. 牛客网 【每日一题】6月11日题目精讲 背包
  6. LeetCode 1171. 从链表中删去总和值为零的连续节点(哈希表)
  7. ElasticSearch IK 分词器快速上手
  8. 判断用户Input输入的事件来进行登陆
  9. 不要错过!MICCAI 2019 所有论文完整下载
  10. 李航《统计学习方法》第三章课后答案链接
  11. Excel常用技巧1
  12. Wince电源管理(五) ---- Windows CE设备驱动开发之电源管理
  13. 容易遗忘的几个js知识点(一)
  14. 获取中国节假日信息api
  15. 2019.3.9 提高B组 T1 JZOJ 4742 单峰
  16. java基础实战项目一:实现家庭记账本的简易记账功能
  17. 手动下载VMware Tolls.ISO
  18. MySQL数据库——检索数据
  19. python实现之一阶二阶导数
  20. 哈工大软件构造课程知识点总结(一)

热门文章

  1. 基于帝企鹅算法优化BP神经网络实现数据预测(Matlab代码实现)
  2. 小话设计模式(十三)职责链模式
  3. NAT类型与P2P游戏
  4. vue文件在服务器上乱码,解决vue-pdf查看pdf文件及打印乱码的问题
  5. web接入 微信SDK
  6. 未来客服会被人工智能代替吗?
  7. Windows 2003安装和配置活动目录服务 zz
  8. 科研狗的英语翻译小众软件
  9. Element-UI组件实现全局回到顶部功能
  10. Codeforces 686 D - Kay and Snowflake