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

主頁(yè) > 知識(shí)庫(kù) > Sql學(xué)習(xí)第三天——SQL 關(guān)于CTE(公用表達(dá)式)的遞歸查詢使用

Sql學(xué)習(xí)第三天——SQL 關(guān)于CTE(公用表達(dá)式)的遞歸查詢使用

熱門標(biāo)簽:咸陽(yáng)電腦外呼系統(tǒng)運(yùn)營(yíng)商 怎么給高德做地圖標(biāo)注 承德地圖標(biāo)注公司名需要花錢嗎 榕城市地圖標(biāo)注 慶陽(yáng)地圖標(biāo)注 電銷外呼系統(tǒng)軟件功能 北京400電話辦理多少錢 美團(tuán)地圖標(biāo)注商戶認(rèn)證注冊(cè) 浙江穩(wěn)定外呼系統(tǒng)供應(yīng)商

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

  公用表表達(dá)式 (CTE) 具有一個(gè)重要的優(yōu)點(diǎn),那就是能夠引用其自身,從而創(chuàng)建遞歸 CTE。遞歸 CTE 是一個(gè)重復(fù)執(zhí)行初始 CTE 以返回?cái)?shù)據(jù)子集直到獲取完整結(jié)果集的公用表表達(dá)式。

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

  遞歸 CTE 可以極大地簡(jiǎn)化在 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 語(yǔ)句中運(yùn)行遞歸查詢所需的代碼。在 SQL Server 的早期版本中,遞歸查詢通常需要使用臨時(shí)表、游標(biāo)和邏輯來(lái)控制遞歸步驟流。 

CTE 的基本語(yǔ)法結(jié)構(gòu)如下:

復(fù)制代碼 代碼如下:

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

    AS

    ( CTE_query_definition )

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

    --運(yùn)行 CTE 的語(yǔ)句為:

    SELECT column_list> FROM expression_name;

在使用CTE時(shí)應(yīng)注意如下幾點(diǎn):

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

復(fù)制代碼 代碼如下:

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

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

with
cte1 as
(
select * from table1 where name like '測(cè)試%'
),
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的表達(dá)式名稱與某個(gè)數(shù)據(jù)表或視圖重名,則緊跟在該CTE后面的SQL語(yǔ)句使用的仍然是CTE,當(dāng)然,后面的SQL語(yǔ)句使用的就是數(shù)據(jù)表或視圖。

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

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

復(fù)制代碼 代碼如下:

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

6. 如果將 CTE 用在屬于批處理的一部分的語(yǔ)句中,那么在它之前的語(yǔ)句必須以分號(hào)結(jié)尾,如下面的SQL所示:
復(fù)制代碼 代碼如下:

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

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

上面可能對(duì)with as說(shuō)的有點(diǎn)兒?jiǎn)铝耍旅孢M(jìn)入正題:

老規(guī)矩先建表(Co_ItemNameSet):

復(fù)制代碼 代碼如下:

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

插入數(shù)據(jù):
復(fù)制代碼 代碼如下:

--給表插入數(shù)據(jù)
insert into dbo.Co_ItemNameSet values(2,0,'管理費(fèi)用')
insert into dbo.Co_ItemNameSet values(3,0,'銷售費(fèi)用')
insert into dbo.Co_ItemNameSet values(4,0,'財(cái)務(wù)費(fèi)用')
insert into dbo.Co_ItemNameSet values(5,0,'生產(chǎn)成本')
insert into dbo.Co_ItemNameSet values(35,5,'材料')
insert into dbo.Co_ItemNameSet values(36,5,'人工')
insert into dbo.Co_ItemNameSet values(37,5,'制造費(fèi)用')
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,'管理費(fèi)用子項(xiàng)')
insert into dbo.Co_ItemNameSet values(113,43,'管理費(fèi)用子項(xiàng)的子項(xiàng)')

查詢插入的數(shù)據(jù):
復(fù)制代碼 代碼如下:

--查詢數(shù)據(jù)
select * from Co_ItemNameSet

結(jié)果圖:

題目需求是:查詢ItemId=2及子節(jié)點(diǎn),也就是管理費(fèi)用和其下屬所有節(jié)點(diǎn)的信息

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

復(fù)制代碼 代碼如下:

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

結(jié)果圖:

操作2:用CTE遞歸操作的sql語(yǔ)句如下:

復(fù)制代碼 代碼如下:

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

結(jié)果圖:

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

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

遞歸 CTE 由下列三個(gè)元素組成:

例程的調(diào)用。

遞歸 CTE 的第一個(gè)調(diào)用包括一個(gè)或多個(gè)由 UNION ALL、UNION、EXCEPT 或 INTERSECT 運(yùn)算符聯(lián)接的 CTE_query_definitions。由于這些查詢定義形成了 CTE 結(jié)構(gòu)的基準(zhǔn)結(jié)果集,所以它們被稱為“定位點(diǎn)成員”。

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

例程的遞歸調(diào)用。

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

終止檢查。

終止檢查是隱式的;當(dāng)上一個(gè)調(diào)用中未返回行時(shí),遞歸將停止。

    遞歸 CTE 結(jié)構(gòu)必須至少包含一個(gè)定位點(diǎn)成員和一個(gè)遞歸成員。以下偽代碼顯示了包含一個(gè)定位點(diǎn)成員和一個(gè)遞歸成員的簡(jiǎn)單遞歸 CTE 的組件。

    復(fù)制代碼 代碼如下:

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

    現(xiàn)在讓我們看一下遞歸執(zhí)行過(guò)程:

    將 CTE 表達(dá)式拆分為定位點(diǎn)成員和遞歸成員。

    運(yùn)行定位點(diǎn)成員,創(chuàng)建第一個(gè)調(diào)用或基準(zhǔn)結(jié)果集 (T0)。

    運(yùn)行遞歸成員,將 Ti 作為輸入,將 Ti+1 作為輸出。

    重復(fù)步驟 3,直到返回空集。

    返回結(jié)果集。這是對(duì) T0 到 Tn 執(zhí)行 UNION ALL 的結(jié)果。

    您可能感興趣的文章:
    • SQLserver2008使用表達(dá)式遞歸查詢
    • sqlserver另類非遞歸的無(wú)限級(jí)分類(存儲(chǔ)過(guò)程版)
    • SQLSERVER2005 中樹形數(shù)據(jù)的遞歸查詢
    • 使用SQLSERVER 2005/2008 遞歸CTE查詢樹型結(jié)構(gòu)的方法
    • sqlserver中存儲(chǔ)過(guò)程的遞歸調(diào)用示例
    • 使用SqlServer CTE遞歸查詢處理樹、圖和層次結(jié)構(gòu)

    標(biāo)簽:呼和浩特 貴州 江蘇 上海 拉薩 重慶 新鄉(xiāng) 昭通

    巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Sql學(xué)習(xí)第三天——SQL 關(guān)于CTE(公用表達(dá)式)的遞歸查詢使用》,本文關(guān)鍵詞  Sql,學(xué)習(xí),第三天,SQL,關(guān)于,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  1. 相關(guān)文章
  2. 下面列出與本文章《Sql學(xué)習(xí)第三天——SQL 關(guān)于CTE(公用表達(dá)式)的遞歸查詢使用》相關(guān)的同類信息!
  3. 本頁(yè)收集關(guān)于Sql學(xué)習(xí)第三天——SQL 關(guān)于CTE(公用表達(dá)式)的遞歸查詢使用的相關(guān)信息資訊供網(wǎng)民參考!
  4. 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91在线看国产| 免费黄网站欧美| 精品区一区二区| 欧美性做爰猛烈叫床潮| 粉嫩av亚洲一区二区图片| 麻豆成人免费电影| 强制捆绑调教一区二区| 亚洲成人激情av| 亚洲欧美激情插| 亚洲私人黄色宅男| 1区2区3区欧美| 一区在线观看视频| 成人欧美一区二区三区在线播放| 成人教育av在线| 成人黄色免费短视频| 粉嫩绯色av一区二区在线观看| 国产精品短视频| 亚洲欧美一区二区三区久本道91| 欧美性视频一区二区三区| 91极品美女在线| 欧美人妇做爰xxxⅹ性高电影| 国产一区免费电影| 懂色av噜噜一区二区三区av| 国产精品一级黄| 成人黄色在线网站| 色天使久久综合网天天| 在线这里只有精品| 91精品国产综合久久婷婷香蕉| 91影视在线播放| 在线一区二区视频| 欧美亚洲动漫精品| 日韩视频在线观看一区二区| 欧美精品一区二区不卡| 国产精品美女久久福利网站| 亚洲欧美一区二区在线观看| 一级日本不卡的影视| 日韩精品电影一区亚洲| 久久er99热精品一区二区| 懂色av中文一区二区三区| 91免费看片在线观看| 欧美一区二区三区四区五区 | 亚洲综合自拍偷拍| 午夜欧美一区二区三区在线播放| 国产精品的网站| 天天综合日日夜夜精品| 国产一区二区三区久久久| 99精品视频一区二区三区| 欧美电影一区二区三区| 国产偷国产偷亚洲高清人白洁| 欧美一区二区在线看| 国产午夜精品一区二区三区嫩草| 欧美一区二区三区在线观看| 中日韩av电影| 日韩精品一级中文字幕精品视频免费观看 | 国内精品久久久久影院薰衣草| 亚洲精品视频在线观看免费| 日本v片在线高清不卡在线观看| 亚洲精品写真福利| 丝袜美腿亚洲一区| 成人伦理片在线| 91传媒视频在线播放| 欧美一级在线观看| 一区二区三区中文免费| 国产麻豆9l精品三级站| 97久久精品人人澡人人爽| 日韩一区二区免费高清| 亚洲欧洲另类国产综合| 狠狠色综合播放一区二区| 欧美性受极品xxxx喷水| 国产精品久久久久永久免费观看 | 91福利在线免费观看| 欧美大片拔萝卜| 亚洲成人一二三| 91啪亚洲精品| 久久婷婷国产综合精品青草| 亚洲成人动漫在线免费观看| 国产91精品久久久久久久网曝门| 国产一区999| 91精品国产一区二区| 亚洲国产精品传媒在线观看| 麻豆精品在线视频| 91精品国产综合久久久久久久久久| 制服丝袜成人动漫| 一区二区三区日本| 国产一区二区三区高清播放| 日韩欧美一区中文| 日本美女视频一区二区| 欧美日韩在线免费视频| 亚洲午夜在线观看视频在线| av动漫一区二区| 亚洲人成影院在线观看| 91在线观看地址| 亚洲欧美一区二区在线观看| 国产**成人网毛片九色 | 欧美日韩一级黄| 亚洲伦理在线免费看| eeuss鲁一区二区三区| 精品国偷自产国产一区| 九九精品一区二区| 精品美女一区二区| 美女视频免费一区| 91精品国产综合久久小美女| 午夜在线电影亚洲一区| 欧美日韩精品一区二区三区四区| 91精品国产麻豆国产自产在线| 精品国产一区二区三区四区四| 国产欧美日韩精品a在线观看| 亚洲天堂免费看| 91天堂素人约啪| 日韩理论片在线| 日本高清成人免费播放| 亚洲国产另类av| 制服丝袜激情欧洲亚洲| 国产一区二区网址| 中国av一区二区三区| 久久精品国产秦先生| 精品国产伦一区二区三区免费 | 99re视频精品| 国产午夜精品久久久久久免费视| 五月激情六月综合| 欧美一区二区三区系列电影| 精品在线观看视频| 亚洲三级小视频| 在线精品视频免费播放| 婷婷亚洲久悠悠色悠在线播放| 成人午夜碰碰视频| 亚洲成人精品影院| 久久久一区二区三区| 色综合久久久久综合体| 日本在线不卡一区| 国产亚洲自拍一区| 色先锋资源久久综合| 精品一区二区三区香蕉蜜桃| 亚洲欧美一区二区不卡| 久久尤物电影视频在线观看| 色诱亚洲精品久久久久久| 精品一区二区三区久久| 亚洲福中文字幕伊人影院| 欧美韩日一区二区三区四区| 欧美精品99久久久**| 粉嫩13p一区二区三区| 日日夜夜免费精品视频| 中文字幕一区二区三区在线播放| 成人高清视频在线| 久久国产精品无码网站| 亚洲成人在线观看视频| 中文字幕佐山爱一区二区免费| 成人a级免费电影| 精品一区二区免费在线观看| 婷婷综合另类小说色区| 亚洲伦理在线精品| 日本一二三不卡| 精品国产凹凸成av人导航| 欧洲精品在线观看| a美女胸又www黄视频久久| 国产在线精品不卡| 免费人成精品欧美精品| 亚洲第一福利视频在线| 一区二区视频在线看| 国产精品久久福利| 久久久久免费观看| 欧美v亚洲v综合ⅴ国产v| 欧美嫩在线观看| 在线国产电影不卡| 日本精品视频一区二区| 91在线视频播放地址| 成人app软件下载大全免费| 国产麻豆视频精品| 精品一区二区三区影院在线午夜| 国产精品国产三级国产aⅴ原创| 91行情网站电视在线观看高清版| 亚洲黄网站在线观看| 亚洲日韩欧美一区二区在线| 欧美韩国一区二区| 国产精品久久久一本精品| 国产精品高潮久久久久无| 中文字幕欧美日本乱码一线二线| 欧美制服丝袜第一页| 欧美亚洲动漫精品| 91精品国产综合久久久久久漫画| 国产成人免费xxxxxxxx| 成人免费黄色在线| 不卡一区二区中文字幕| 91一区二区在线观看| 欧美日韩精品电影| 欧美mv日韩mv国产网站app| 精品国产欧美一区二区| 国产三级欧美三级日产三级99 | 国产传媒欧美日韩成人| 国产一区二区三区久久悠悠色av| 一区二区三区在线免费观看| 亚洲成a人片在线不卡一二三区| 国产亚洲精品福利| 亚洲欧洲av色图| 亚洲在线免费播放| 日韩黄色片在线观看| 国产精品一区二区在线观看不卡| 水蜜桃久久夜色精品一区的特点| 国产精品久久久99| 亚洲精品乱码久久久久久|