成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊SQL中的遞歸查詢

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

遞歸查詢原理

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

遞歸查詢的終止條件

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

遞歸查詢的優點

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

遞歸的常見形式

WITH CTE AS (

SELECT column1,column2... FROM tablename WHERE conditions

UNION ALL

SELECT column1,column2... FROM tablename 

INNER JOIN CTE ON conditions 

)

遞歸查詢示例

創建測試數據,有一個員工表Company,父級ID是部門ID的父節點,這是一個非常簡單的層次結構模型。

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

查詢一下Company表里的數據

圖片圖片

查詢每個部門的的直接上級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

結果如下:

圖片圖片

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

1、查詢父級ID=-1,作為根節點,這是遞歸查詢的起始點。

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

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

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

查詢路徑

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

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

圖片圖片

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

責任編輯:武曉燕 來源: SQL數據庫開發
相關推薦

2022-03-15 08:36:46

遞歸查詢SQL

2021-08-31 07:54:24

SQLDblink查詢

2010-10-11 09:05:40

SQL Server

2023-07-28 09:54:14

SQL數據Excel

2021-09-03 06:46:34

SQL分組集功能

2022-08-03 08:11:58

數據測試同類型

2021-08-16 08:12:04

SQLMerge用法

2021-11-09 06:55:03

SQLServer排序

2011-08-19 14:38:22

SQL Server 2008遞歸查詢

2021-04-25 09:42:40

SQL遞歸SQL Server

2022-10-17 08:22:28

2022-12-08 07:17:49

2009-07-20 17:41:59

Java JDBC

2010-04-02 15:04:14

Oracle遞歸查詢

2021-08-12 07:49:24

SQL遞歸用法

2023-10-26 08:38:43

SQL排名平分分區

2022-07-27 08:31:28

SQL開發控制

2023-06-05 08:36:04

SQL函數RANK()

2024-02-04 09:00:00

向量查詢數據檢索MyScale

2023-11-02 08:38:49

遞歸SQL用法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产99久久 | 亚洲国产精品久久久久久 | 国产亚洲一区二区三区 | 欧美日韩在线不卡 | www.青青草| 久久精品成人 | 三级黄色片在线观看 | 国产免费福利小视频 | 亚洲一区二区中文字幕在线观看 | 黄色一级毛片免费看 | 久久精品欧美一区二区三区麻豆 | 欧美不卡在线 | 影音先锋中文字幕在线观看 | 91精品国产91久久久久久 | 成人亚洲片 | 亚洲成人精选 | 精品在线视频播放 | 澳门永久av免费网站 | 国产成人av电影 | 亚洲激情综合 | 日韩成人在线观看 | 91一区二区在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 国产成人精品久久二区二区91 | 亚洲精品视频导航 | 欧美又大粗又爽又黄大片视频 | 免费性视频 | 精品福利一区二区三区 | 日韩av成人在线 | 国产精品视频一区二区三区四蜜臂 | 欧美精品久久久久久久久老牛影院 | 日本久久福利 | 亚洲aⅴ一区二区 | 欧美亚洲综合久久 | 国产一区二区不卡 | 中文字幕第90页 | 日韩电影中文字幕 | 久久午夜视频 | 国产精品亚洲二区 | 国产精品久久久久久久久久久久 | 中文字幕综合 |