婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Sql學習第三天——SQL 關于CTE(公用表達式)的遞歸查詢使用

Sql學習第三天——SQL 關于CTE(公用表達式)的遞歸查詢使用

熱門標簽:咸陽電腦外呼系統運營商 怎么給高德做地圖標注 承德地圖標注公司名需要花錢嗎 榕城市地圖標注 慶陽地圖標注 電銷外呼系統軟件功能 北京400電話辦理多少錢 美團地圖標注商戶認證注冊 浙江穩定外呼系統供應商

關于使用CTE(公用表表達式)的遞歸查詢----SQL Server 2005及以上版本

  公用表表達式 (CTE) 具有一個重要的優點,那就是能夠引用其自身,從而創建遞歸 CTE。遞歸 CTE 是一個重復執行初始 CTE 以返回數據子集直到獲取完整結果集的公用表表達式。

  當某個查詢引用遞歸 CTE 時,它即被稱為遞歸查詢。遞歸查詢通常用于返回分層數據,例如:顯示某個組織圖中的雇員或物料清單方案(其中父級產品有一個或多個組件,而那些組件可能還有子組件,或者是其他父級產品的組件)中的數據。

  遞歸 CTE 可以極大地簡化在 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 語句中運行遞歸查詢所需的代碼。在 SQL Server 的早期版本中,遞歸查詢通常需要使用臨時表、游標和邏輯來控制遞歸步驟流。 

CTE 的基本語法結構如下:

復制代碼 代碼如下:

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

    AS

    ( CTE_query_definition )

    --只有在查詢定義中為所有結果列都提供了不同的名稱時,列名稱列表才是可選的。

    --運行 CTE 的語句為:

    SELECT column_list> FROM expression_name;

在使用CTE時應注意如下幾點:

CTE后面必須直接跟使用CTE的SQL語句(如select、insert、update等),否則,CTE將失效。如下面的SQL語句將無法正常使用CTE:

復制代碼 代碼如下:

  with
  cr as
  (
  select * from 表名 where 條件
   )
  --select * from person.CountryRegion --如果加上這句話后面用到cr將報錯
  select * from cr

2. CTE后面也可以跟其他的CTE,但只能使用一個with,多個CTE中間用逗號(,)分隔,如下面的SQL語句所示:
復制代碼 代碼如下:

with
cte1 as
(
select * from table1 where name like '測試%'
),
cte2 as
(
select * from table2 where id > 20
),
cte3 as
(
select * from table3 where price 100
)
select a.* from cte1 a, cte2 b, cte3 c where a.id = b.id and a.id = c.id

3. 如果CTE的表達式名稱與某個數據表或視圖重名,則緊跟在該CTE后面的SQL語句使用的仍然是CTE,當然,后面的SQL語句使用的就是數據表或視圖。

4. CTE 可以引用自身,也可以引用在同一 WITH 子句中預先定義的 CTE。

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

復制代碼 代碼如下:

COMPUTE 或 COMPUTE BY
ORDER BY(除非指定了 TOP 子句)
INTO
帶有查詢提示的 OPTION 子句
FOR XML
FOR BROWSE

6. 如果將 CTE 用在屬于批處理的一部分的語句中,那么在它之前的語句必須以分號結尾,如下面的SQL所示:
復制代碼 代碼如下:

declare @s nvarchar(3)
set @s = '測試%'; -- 必須加分號
with
t_tree as
(
select * from 表 where 字段 like @s
)
select * from t_tree

------------------------------------操作------------------------------------

上面可能對with as說的有點兒啰嗦了,下面進入正題:

老規矩先建表(Co_ItemNameSet):

復制代碼 代碼如下:

CREATE TABLE [dbo].[Co_ItemNameSet](
[ItemId] [int] NULL,
[ParentItemId] [int] NULL,
[ItemName] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

插入數據:
復制代碼 代碼如下:

--給表插入數據
insert into dbo.Co_ItemNameSet values(2,0,'管理費用')
insert into dbo.Co_ItemNameSet values(3,0,'銷售費用')
insert into dbo.Co_ItemNameSet values(4,0,'財務費用')
insert into dbo.Co_ItemNameSet values(5,0,'生產成本')
insert into dbo.Co_ItemNameSet values(35,5,'材料')
insert into dbo.Co_ItemNameSet values(36,5,'人工')
insert into dbo.Co_ItemNameSet values(37,5,'制造費用')
insert into dbo.Co_ItemNameSet values(38,35,'原材料')
insert into dbo.Co_ItemNameSet values(39,35,'主要材料')
insert into dbo.Co_ItemNameSet values(40,35,'間輔材料')
insert into dbo.Co_ItemNameSet values(41,36,'工資')
insert into dbo.Co_ItemNameSet values(42,36,'福利')
insert into dbo.Co_ItemNameSet values(43,2,'管理費用子項')
insert into dbo.Co_ItemNameSet values(113,43,'管理費用子項的子項')

查詢插入的數據:
復制代碼 代碼如下:

--查詢數據
select * from Co_ItemNameSet

結果圖:

題目需求是:查詢ItemId=2及子節點,也就是管理費用和其下屬所有節點的信息

操作1:先看看不用CTE遞歸操作的sql語句如下(需要真是的建兩個表進行數據的存放和判斷,非常麻煩):

復制代碼 代碼如下:

declare @i int
select @i=2;

create table #tem(
[ItemId] [INT] NOT NULL,
[level] INT
);

create table #list(
[ItemId] [INT] NOT NULL,
[ParentItemId] [INT] NOT NULL default ((0)),
[ItemName] [nvarchar](100) NOT NULL default (''),
[level] int
);

insert INTO #tem([ItemId],[level])
select ItemId,1
from Co_ItemNameSet
where itemid=@i

insert into #list([ItemId],[ParentItemId],[ItemName],[level])
select ItemId,ParentItemId,ItemName,1
from Co_ItemNameSet
where itemid=@i

declare @level int
select @level=1
declare @current INT
select @current=0

while(@level>0)
begin
select @current=ItemId
from #tem
where [level]=@level
if @@ROWCOUNT>0
begin


delete from #tem
where [level]=@level and ItemId=@current

insert into #tem([ItemId],[level])
select [ItemId],@level+1
from Co_ItemNameSet
where ParentItemId=@current

insert into #list([ItemId],[ParentItemId],[ItemName],[level])
select [ItemId],[ParentItemId],[ItemName],@level+1
from Co_ItemNameSet
where ParentItemId=@current
if @@rowcount>0
begin
select @level=@level+1
end
end
else
begin
select @level=@level-1
end
end

select * from #list
drop table #tem
drop table #list

結果圖:

操作2:用CTE遞歸操作的sql語句如下:

復制代碼 代碼如下:

DECLARE @i INT
SELECT @i=2;
WITH Co_ItemNameSet_CTE(ItemId,ParentItemId,ItemName,[Level])
AS
(
SELECT ItemId,ParentItemId,ItemName,1 AS [Level]
FROM Co_ItemNameSet
WHERE itemid=@i
UNION ALL
SELECT c.ItemId,c.ParentItemId,c.ItemName,[Level] + 1
FROM Co_ItemNameSet c INNER JOIN Co_ItemNameSet_CTE ct
ON c.ParentItemId=ct.ItemId
)
SELECT * FROM Co_ItemNameSet_CTE

結果圖:

-----------------------------分析(查看MSDN的分析)----------------------------

主要分析一下用CTE的遞歸操作:

遞歸 CTE 由下列三個元素組成:

例程的調用。

遞歸 CTE 的第一個調用包括一個或多個由 UNION ALL、UNION、EXCEPT 或 INTERSECT 運算符聯接的 CTE_query_definitions。由于這些查詢定義形成了 CTE 結構的基準結果集,所以它們被稱為“定位點成員”。

CTE_query_definitions 被視為定位點成員,除非它們引用了 CTE 本身。所有定位點成員查詢定義必須放置在第一個遞歸成員定義之前,而且必須使用 UNION ALL 運算符聯接最后一個定位點成員和第一個遞歸成員。

例程的遞歸調用。

遞歸調用包括一個或多個由引用 CTE 本身的 UNION ALL 運算符聯接的 CTE_query_definitions(就是as里的語句塊)。這些查詢定義被稱為“遞歸成員”。

終止檢查。

終止檢查是隱式的;當上一個調用中未返回行時,遞歸將停止。

    遞歸 CTE 結構必須至少包含一個定位點成員和一個遞歸成員。以下偽代碼顯示了包含一個定位點成員和一個遞歸成員的簡單遞歸 CTE 的組件。

    復制代碼 代碼如下:

    WITH cte_name ( column_name [,...n] )
    AS 
    (
    CTE_query_definition --定位點成員
    UNION ALL
    CTE_query_definition --遞歸成員. 
    )

    現在讓我們看一下遞歸執行過程:

    將 CTE 表達式拆分為定位點成員和遞歸成員。

    運行定位點成員,創建第一個調用或基準結果集 (T0)。

    運行遞歸成員,將 Ti 作為輸入,將 Ti+1 作為輸出。

    重復步驟 3,直到返回空集。

    返回結果集。這是對 T0 到 Tn 執行 UNION ALL 的結果。

    您可能感興趣的文章:
    • SQLserver2008使用表達式遞歸查詢
    • sqlserver另類非遞歸的無限級分類(存儲過程版)
    • SQLSERVER2005 中樹形數據的遞歸查詢
    • 使用SQLSERVER 2005/2008 遞歸CTE查詢樹型結構的方法
    • sqlserver中存儲過程的遞歸調用示例
    • 使用SqlServer CTE遞歸查詢處理樹、圖和層次結構

    標簽:呼和浩特 貴州 江蘇 上海 拉薩 重慶 新鄉 昭通

    巨人網絡通訊聲明:本文標題《Sql學習第三天——SQL 關于CTE(公用表達式)的遞歸查詢使用》,本文關鍵詞  Sql,學習,第三天,SQL,關于,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  1. 相關文章
  2. 下面列出與本文章《Sql學習第三天——SQL 關于CTE(公用表達式)的遞歸查詢使用》相關的同類信息!
  3. 本頁收集關于Sql學習第三天——SQL 關于CTE(公用表達式)的遞歸查詢使用的相關信息資訊供網民參考!
  4. 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91成人在线免费观看| 激情av综合网| 亚洲狠狠爱一区二区三区| 亚洲国产色一区| 国产很黄免费观看久久| 欧美亚洲精品一区| 国产精品不卡视频| 国产成人欧美日韩在线电影| 制服丝袜中文字幕一区| 亚洲啪啪综合av一区二区三区| 人人超碰91尤物精品国产| 欧美在线观看视频一区二区| 久久在线观看免费| 国产盗摄女厕一区二区三区| 欧美电影免费观看高清完整版在| 一区二区三区欧美| 欧美日韩国产不卡| 久久久国产精华| 粉嫩av亚洲一区二区图片| 久久欧美一区二区| 丁香婷婷综合色啪| 亚洲欧美日韩一区| 欧美日韩夫妻久久| 激情综合色综合久久| 精品久久人人做人人爽| 精品一区二区三区日韩| 欧美成人性战久久| 国产精品系列在线观看| 国产亚洲综合av| 制服丝袜亚洲网站| 不卡视频免费播放| 日本不卡视频一二三区| 国产午夜精品福利| 欧美日韩一区成人| 成人免费电影视频| 蜜臀99久久精品久久久久久软件| 国产日本欧洲亚洲| 欧美日韩成人在线| 99精品视频一区二区三区| 秋霞电影一区二区| 中文字幕一区二区三区视频| 欧美精品高清视频| 在线观看区一区二| 成人在线综合网站| 日韩电影在线观看电影| 综合欧美亚洲日本| 日韩一区日韩二区| 亚洲人吸女人奶水| 亚洲精品乱码久久久久久日本蜜臀| 欧美一区二区二区| 在线观看av一区二区| 国产99久久久久| 成人免费看黄yyy456| 成人在线视频一区| 国产高清亚洲一区| 国产+成+人+亚洲欧洲自线| 日一区二区三区| 午夜久久久久久电影| 亚洲综合久久av| 亚洲男同性视频| 亚洲人被黑人高潮完整版| 精品国产露脸精彩对白| 日韩一区二区三区四区五区六区| 99久久精品一区二区| 91麻豆精品国产自产在线观看一区| 亚洲精品成人悠悠色影视| 精品国产网站在线观看| 久久久久久久电影| 亚洲影院在线观看| 日韩在线一二三区| 国产成人精品aa毛片| 国产精品久久久久久久久免费相片 | 国产精品18久久久久久vr| 久久久亚洲国产美女国产盗摄| 91蜜桃传媒精品久久久一区二区| 午夜精品福利久久久| ●精品国产综合乱码久久久久| 欧美午夜一区二区三区免费大片| 老司机午夜精品| 亚洲精品日韩一| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 97久久精品人人做人人爽50路| 国产亚洲自拍一区| 欧美大尺度电影在线| 91激情在线视频| 美女网站色91| 亚洲一区二三区| 久久久亚洲高清| 欧美三级视频在线| zzijzzij亚洲日本少妇熟睡| 日韩高清在线观看| 亚洲综合激情网| 亚洲男人的天堂在线观看| 欧美高清在线精品一区| 精品国产一区二区亚洲人成毛片| 色激情天天射综合网| 国产风韵犹存在线视精品| 男女视频一区二区| 亚洲精品v日韩精品| 日韩一级免费观看| 欧美人狂配大交3d怪物一区| 精品无人码麻豆乱码1区2区 | 亚洲444eee在线观看| 亚洲欧洲日韩综合一区二区| 日韩女优毛片在线| 欧美sm美女调教| 中文在线免费一区三区高中清不卡| 精品久久久久久综合日本欧美| 久久女同精品一区二区| 国产精品国产三级国产aⅴ无密码| 久久久久国产精品厨房| 国产精品美女一区二区三区| 亚洲第一电影网| 国产麻豆91精品| 69精品人人人人| 日本一区二区视频在线| 亚洲国产中文字幕在线视频综合| 秋霞电影网一区二区| 国产精品一区二区黑丝 | 国产成人av影院| 亚洲精品一区二区三区香蕉| 亚欧色一区w666天堂| 91片黄在线观看| 成人欧美一区二区三区小说| 精品一区二区免费视频| 91久久精品网| 中文字幕亚洲欧美在线不卡| 久草这里只有精品视频| 欧美老肥妇做.爰bbww| 亚洲一区视频在线观看视频| 从欧美一区二区三区| 久久久亚洲精华液精华液精华液| 老司机一区二区| 欧美最新大片在线看| 亚洲欧洲成人精品av97| 岛国一区二区在线观看| 久久精品欧美日韩精品 | 日本美女一区二区| 日韩一级片在线观看| 成人一级黄色片| 椎名由奈av一区二区三区| av午夜一区麻豆| 一二三四区精品视频| 欧美色图第一页| 久久99日本精品| 日本一区二区三级电影在线观看| 99久久久精品免费观看国产蜜| 国产精品毛片高清在线完整版| 色婷婷狠狠综合| 蜜臀久久久久久久| 国产精品久久久久久亚洲毛片| 99久精品国产| 国产一区欧美一区| 亚洲成人一区在线| 国产精品小仙女| 欧美不卡123| 欧美日产国产精品| 成人av动漫网站| 成人污污视频在线观看| 亚洲成人av一区二区三区| 国产视频一区二区三区在线观看| 色婷婷国产精品综合在线观看| 国产精品一品二品| 久久精品国产亚洲高清剧情介绍| 最新中文字幕一区二区三区| 精品88久久久久88久久久| 91精品久久久久久蜜臀| 91久久一区二区| 在线一区二区三区四区| www.性欧美| 成人h精品动漫一区二区三区| 麻豆精品视频在线观看| 久久国产尿小便嘘嘘尿| 久国产精品韩国三级视频| 国内精品久久久久影院色 | 99re成人精品视频| 色综合一个色综合亚洲| 欧美视频在线一区二区三区 | 亚洲精品视频免费看| 国产精品成人免费| 一级做a爱片久久| 毛片不卡一区二区| 国产综合久久久久久久久久久久| 国产在线麻豆精品观看| 国产成人av电影在线| 色婷婷av久久久久久久| 欧美视频在线观看一区| 日韩午夜电影av| 亚洲精品视频在线看| 美国三级日本三级久久99| 99精品在线免费| 欧美一区二区三区四区在线观看| 欧美精品三级日韩久久| 久久久久久久久99精品| 一区二区三区欧美视频| 国产成人鲁色资源国产91色综| 欧美亚洲自拍偷拍| 精品三级在线观看| 日韩国产欧美三级| 欧美性三三影院|