日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQL中的遞歸查詢,你會嗎?

遞歸查詢原理

SQL Server中的遞歸查詢是通過CTE(表表達式)來實現(xiàn)。至少包含兩個查詢,第一個查詢?yōu)槎c成員,定點成員只是一個返回有效表的查詢,用于遞歸的基礎(chǔ)或定位點;第二個查詢被稱為遞歸成員,使該查詢稱為遞歸成員的是對CTE名稱的遞歸引用是觸發(fā)。在邏輯上可以將CTE名稱的內(nèi)部應(yīng)用理解為前一個查詢的結(jié)果集。

創(chuàng)新互聯(lián)主營于田網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機APP定制開發(fā),于田h5小程序設(shè)計搭建,于田網(wǎng)站營銷推廣歡迎于田等地區(qū)企業(yè)咨詢

遞歸查詢的終止條件

遞歸查詢沒有顯式的遞歸終止條件,只有當?shù)诙€遞歸查詢返回空結(jié)果集或是超出了遞歸次數(shù)的最大限制時才停止遞歸。是指遞歸次數(shù)上限的方法是使用MAXRECURION。

遞歸查詢的優(yōu)點

效率高,大量數(shù)據(jù)集下,速度比程序的查詢快。

遞歸的常見形式

WITH CTE AS (
SELECT column1,column2... FROM tablename WHERE conditions
UNION ALL
SELECT column1,column2... FROM tablename
INNER JOIN CTE ON conditions
)

遞歸查詢示例

創(chuàng)建測試數(shù)據(jù),有一個員工表Company,父級ID是部門ID的父節(jié)點,這是一個非常簡單的層次結(jié)構(gòu)模型。

USE SQL_Road
GO
CREATE TABLE Company
(
部門ID INT,
父級ID INT,
部門名稱 VARCHAR(10)
)
INSERT INTO Company VALUES
(1,-1,'總部'),
(11,1,'財務(wù)中心'),
(12,1,'人力中心'),
(13,1,'信息中心'),
(111,11,'會計組'),
(112,11,'出納組'),
(121,12,'薪酬組')

查詢一下Company表里的數(shù)據(jù):

查詢每個部門的的直接上級ID:

WITH CTE AS(
SELECT 部門ID,父級ID,部門名稱,部門名稱 AS 父級部門名稱
FROM Company
WHERE 父級ID=-1
UNION ALL
SELECT c.部門ID,c.父級ID,c.部門名稱,p.部門名稱 AS 父級部門名稱
FROM CTE P
INNER JOIN Company c ON p.部門ID=c.父級ID
)

SELECT 部門ID,父級ID,部門名稱,父級部門名稱
FROM CTE

結(jié)果如下:

我們來解讀一下上面的代碼:

1.查詢父級ID=-1,作為根節(jié)點,這是遞歸查詢的起始點。

2.迭代公式是 UNION ALL 下面的查詢語句。在查詢語句中調(diào)用中CTE,而查詢語句就是CTE的組成部分,即 “自己調(diào)用自己”,這就是遞歸的真諦所在。

所謂迭代,是指每一次遞歸都要調(diào)用上一次查詢的結(jié)果集,UNION ALL是指每次都把結(jié)果集并在一起。

3.迭代公式利用上一次查詢返回的結(jié)果集執(zhí)行特定的查詢,直到CTE返回NULL或達到最大的迭代次數(shù),默認值是32。最終的結(jié)果集是迭代公式返回的各個結(jié)果集的并集,求并集是由UNION ALL 子句定義的,并且只能使用UNION ALL

查詢路徑

下面我們通過層次結(jié)構(gòu)查詢子節(jié)點到父節(jié)點的PATH,我們對上面的代碼稍作修改:

WITH CTE AS(
SELECT 部門ID,父級ID,部門名稱,CAST(部門名稱 AS NVARCHAR(MAX)) AS 部門路徑
FROM Company
WHERE 父級ID=-1
UNION ALL
SELECT c.部門ID,c.父級ID,c.部門名稱,p.部門路徑+'->'+c.部門名稱 AS 部門路徑
FROM CTE P
INNER JOIN Company c ON p.部門ID=c.父級ID
)

SELECT 部門ID,父級ID,部門名稱,部門路徑
FROM CTE

其中CAST(部門名稱 AS VARCHAR(MAX))是將部門名稱的長度設(shè)置為最大,防止字段過長超出字段長度。具體結(jié)果如下:

以上就是遞歸查詢的一些知識介紹了,自己可以動手實驗一下,這個一般在面試中也經(jīng)常會考察面試者,希望能幫助到大家!


當前文章:SQL中的遞歸查詢,你會嗎?
本文路徑:http://m.5511xx.com/article/ccodoec.html