Summary: in this tutorial, you will learn how to use the SQL Server recursive CTE to query hierarchical data.
Introduction to SQL Server recursive CTE #
A recursive common table expression (CTE) is a CTE that references itself. By doing so, the CTE repeatedly executes, returns subsets of data, until it returns the complete result set.
A recursive CTE is useful in querying hierarchical data such as organization charts where one employee reports to a manager or multi-level bill of materials when a product consists of many components, and each component itself also consists of many other components.
The following shows the syntax of a recursive CTE:
WITH expression_name (column_list)
AS
(
-- Anchor member
initial_query
UNION ALL
-- Recursive member that references expression_name.
recursive_query
)
-- references expression name
SELECT *
FROM expression_name
Code language: SQL (Structured Query Language) (sql)In general, a recursive CTE has three parts:
- An initial query that returns the base result set of the CTE. The initial query is called an anchor member.
- A recursive query that references the common table expression, therefore, it is called the recursive member. The recursive member is union-ed with the anchor member using the
UNION ALLoperator. - A termination condition specified in the recursive member that terminates the execution of the recursive member.
The execution order of a recursive CTE is as follows:
- First, execute the anchor member to form the base result set (R0), use this result for the next iteration.
- Second, execute the recursive member with the input result set from the previous iteration (Ri-1) and return a sub-result set (Ri) until the termination condition is met.
- Third, combine all result sets R0, R1, … Rn using
UNION ALLoperator to produce the final result set.
The following flowchart illustrates the execution of a recursive CTE: