欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SQL中的遞歸原理

這篇文章主要介紹“SQL中的遞歸原理”,在日常操作中,相信很多人在SQL中的遞歸原理問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SQL中的遞歸原理”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

站在用戶的角度思考問題,與客戶深入溝通,找到川匯網站設計與川匯網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網站、網站建設、外貿營銷網站建設、企業(yè)官網、英文網站、手機端網站、網站推廣、主機域名網站空間、企業(yè)郵箱。業(yè)務覆蓋川匯地區(qū)。

遞歸查詢原理

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

遞歸查詢的終止條件

遞歸查詢沒有顯式的遞歸終止條件,只有當第二個遞歸查詢返回空結果集或是超出了遞歸次數的最大限制時才停止遞歸。是指遞歸次數上限的方法是使用MAXRECURION。

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

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

遞歸的常見形式

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

遞歸查詢示例

創(chuàng)建測試數據,有一個員工表Employee,ManagerID是UserID的父節(jié)點,這是一個非常簡單的層次結構模型。

USE SQL_Road GO  CREATE  TABLE Employee (     UserID INT,     ManagerID INT,     Name NVARCHAR(10) )  INSERT  INTO dbo.Employee  SELECT 1,-1,N'Boss'  UNION  ALL  SELECT 11,1,N'A1'  UNION  ALL  SELECT 12,1,N'A2'  UNION  ALL  SELECT 13,1,N'A3'  UNION  ALL  SELECT 111,11,N'B1'  UNION  ALL  SELECT 112,11,N'B2'  UNION  ALL  SELECT 121,12,N'C1'

查詢一下Employee表里的數據

SQL中的遞歸原理

查詢每個User的的直接上級Manager

WITH CTE AS(  SELECT UserID,ManagerID,Name,Name AS ManagerName  FROM dbo.Employee  WHERE ManagerID=-1  UNION ALL  SELECT c.UserID,c.ManagerID,c.Name,p.Name AS ManagerName  FROM CTE P  INNER JOIN dbo.Employee c ON p.UserID=c.ManagerID )  SELECT UserID,ManagerID,Name,ManagerName FROM CTE

結果如下:

SQL中的遞歸原理

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

1、查詢ManagerID=-1,作為根節(jié)點,這是遞歸查詢的起始點。

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

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

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

查詢路徑

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

WITH CTE AS(  SELECT UserID,ManagerID,Name,CAST(Name AS NVARCHAR(MAX)) AS LPath   FROM dbo.Employee  WHERE ManagerID=-1  UNION ALL  SELECT c.UserID,c.ManagerID,c.Name,p.LPath+'->'+c.Name AS LPath  FROM CTE P  INNER JOIN dbo.Employee c ON p.UserID=c.ManagerID  )  SELECT UserID,ManagerID,Name,LPath FROM CTE

其中CAST(Name AS NVARCHAR(MAX))是將Name的長度設置為最大,防止字段過長超出字段長度。具體結果如下:

SQL中的遞歸原理

到此,關于“SQL中的遞歸原理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

本文名稱:SQL中的遞歸原理
網頁路徑:http://www.chinadenli.net/article48/pejehp.html

成都網站建設公司_創(chuàng)新互聯,為您提供全網營銷推廣外貿建站網站改版軟件開發(fā)網站收錄用戶體驗

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

外貿網站建設