日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

详解公用表表达式(CTE)

發布時間:2024/9/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解公用表表达式(CTE) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介


???? 對于SELECT查詢語句來說,通常情況下,為了使T-SQL代碼更加簡潔和可讀,在一個查詢中引用另外的結果集都是通過視圖而不是子查詢來進行分解的.但是,視圖是作為系統對象存在數據庫中,那對于結果集僅僅需要在存儲過程或是用戶自定義函數中使用一次的時候,使用視圖就顯得有些奢侈了.

??? 公用表表達式(Common Table Expression)是SQL SERVER 2005版本之后引入的一個特性.CTE可以看作是一個臨時的結果集,可以在接下來的一個SELECT,INSERT,UPDATE,DELETE,MERGE語句中被多次引用。使用公用表達式可以讓語句更加清晰簡練.

???? 除此之外,根據微軟對CTE好處的描述,可以歸結為四點:

  • ???? 可以定義遞歸公用表表達式(CTE)
  • ???? 當不需要將結果集作為視圖被多個地方引用時,CTE可以使其更加簡潔
  • ??? GROUP BY語句可以直接作用于子查詢所得的標量列
  • ??? 可以在一個語句中多次引用公用表表達式(CTE)

公用表表達式(CTE)的定義


??? 公用表達式的定義非常簡單,只包含三部分:

  • ? 公用表表達式的名字(在WITH之后)
  • ? 所涉及的列名(可選)
  • ? 一個SELECT語句(緊跟AS之后)
  • ??? 在MSDN中的原型:

    WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition )

    ?? 按照是否遞歸,可以將公用表(CTE)表達式分為遞歸公用表表達式和非遞歸公用表表達式.

    非遞歸公用表表達式(CTE)


    ?? 非遞歸公用表表達式(CTE)是查詢結果僅僅一次性返回一個結果集用于外部查詢調用。并不在其定義的語句中調用其自身的CTE

    ?? 非遞歸公用表表達式(CTE)的使用方式和視圖以及子查詢一致

    ?? 比如一個簡單的非遞歸公用表表達式:

    ??

    ?? 當然,公用表表達式的好處之一是可以在接下來一條語句中多次引用:

    ??

    ?? 前面我一直強調“在接下來的一條語句中”,意味著只能接下來一條使用:

    ??

    ?? 由于CTE只能在接下來一條語句中使用,因此,當需要接下來的一條語句中引用多個CTE時,可以定義多個,中間用逗號分隔:

    ??

    遞歸公用表表達式(CTE)


    ??? 遞歸公用表表達式很像派生表(Derived Tables ),指的是在CTE內的語句中調用其自身的CTE.與派生表不同的是,CTE可以在一次定義多次進行派生遞歸.對于遞歸的概念,是指一個函數或是過程直接或者間接的調用其自身,遞歸的簡單概念圖如下:

    ??

    ??? 遞歸在C語言中實現的一個典型例子是斐波那契數列:

    long fib(int n)    {   if (n==0) return 0;if (n==1) return 1;   if (n>1) return fib(n-1)+fib(n-2); }

    ?? 上面C語言代碼可以看到,要構成遞歸函數,需要兩部分。第一部分是基礎部分,返回固定值,也就是告訴程序何時開始遞歸。第二部分是循環部分,是函數或過程直接或者間接調用自身進行遞歸.

    ?? 對于遞歸公用表達式來說,實現原理也是相同的,同樣需要在語句中定義兩部分:

    • ?? 基本語句
    • ?? 遞歸語句

    ?? 在SQL這兩部分通過UNION ALL連接結果集進行返回:

    ?? 比如:在AdventureWork中,我想知道每個員工所處的層級,0是最高級

    ??

    ?? 這么復雜的查詢通過遞歸CTE變得如此優雅和簡潔.這也是CTE最強大的地方.

    ?? 當然,越強大的力量,就需要被約束.如果使用不當的話,遞歸CTE可能會出現無限遞歸。從而大量消耗SQL Server的服務器資源.因此,SQL Server提供了OPTION選項,可以設定最大的遞歸次數:

    ?? 還是上面那個語句,限制了遞歸次數:

    ??

    ?? 所提示的消息:

    ??

    ?? 這個最大遞歸次數往往是根據數據所代表的具體業務相關的,比如這里,假設公司層級最多只有2層.

    總結?


    ??? CTE是一種十分優雅的存在。CTE所帶來最大的好處是代碼可讀性的提升,這是良好代碼的必須品質之一。使用遞歸CTE可以更加輕松愉快的用優雅簡潔的方式實現復雜的查詢。

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的详解公用表表达式(CTE)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 色播av| 色哟哟黄色| 蜜桃在线一区二区 | 在线观看日韩一区二区 | 日韩一级性生活片 | www成人啪啪18软件 | 九九爱精品 | 成人午夜视频一区二区播放 | 手机看片福利久久 | 香蕉视频黄色片 | 伊人网狼人 | 狠狠干伊人| 国产成人在线网站 | 亚洲一区二区三区在线观看视频 | 岛国片免费在线观看 | 天天综合网永久 | 就去色av | 美女被猛网站 | 91香蕉久久 | 午夜精品久久久久久久久久久久久 | 在线看国产 | 精品久久久无码中文字幕边打电话 | 双性尿奴穿贞c带憋尿 | 成人av高清在线 | 老外毛片 | 丝瓜色版| 国产三极片 | 香蕉国产 | 天天射综合 | 日本一区二区高清不卡 | 久久综合久| 欧美日韩一区二区区 | 国内外成人激情视频 | av日日操| 国产视频第一区 | 中文字幕乱码av | 久久亚洲少妇 | 精品人妻大屁股白浆无码 | 国精产品一区一区三区有限公司杨 | 成人午夜网 | 亚洲欧美精品aaaaaa片 | 欧美大片18| 日本成人在线免费观看 | 亚洲视频在线播放 | 亚洲熟妇av日韩熟妇在线 | 久久午夜视频 | www天天操| 91喷水| 4虎最新网址 | 男人的亚洲天堂 | 激情丁香 | 精品国产乱码久久久久久蜜臀 | 超碰免费在线播放 | 韩日欧美| 影音先锋在线中文字幕 | 成人午夜视频免费在线观看 | 中文在线观看免费网站 | 一区二区三区精品视频 | 国产视频在线观看免费 | 日韩高清一区 | 91精品入口 | 一区二区三区视频免费视 | 又黄又色 | 日韩精品高清视频 | 手机看片国产1024 | 亚洲一区二区三区高清 | 日韩经典午夜福利发布 | 午夜免费看视频 | av免费网站在线观看 | 久久综合久久久 | 亚洲精品乱码久久久久久国产主播 | 久久sese| 国产精品成人无码免费 | av5566| 久久a毛片 | 精品啪啪 | 国产精品三级在线观看无码 | 久久成人资源 | 成人综合激情网 | 粉嫩欧美一区二区三区 | 男女裸体无遮挡做爰 | 91网页在线观看 | 国产精品国产三级国产三级人妇 | 亚洲黄色小说视频 | 日本成人动漫在线观看 | 国产精品自拍亚洲 | 天堂成人在线观看 | 久久3p | 激情五月在线观看 | 国产免费脚交足视频在线观看 | 黄网站免费观看 | 潘金莲一级淫片aaaaaaa | 久久99精品久久久久久噜噜 | 女人下面无遮挡 | 久久艹免费视频 | 哪里看毛片 | 教练含着她的乳奶揉搓揉捏动态图 | 国产乱子伦精品 | 日韩xxxxxxxxx|