数据库: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 ,table23. 如果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 用法笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派学习笔记(十五)博通BCM2835
- 下一篇: IPguard服务器升级步骤详解