SQL Tree

Posted on 2013-05-26
Last Modified: 2013-05-27
I am working with T-SQL and read that CTE is better than subqeries when working with Trees.  I am not familiar with the term Tree with regards to T-SQL.  Any ideas on what this is and how it is used in T-SQL ? Thanks for any feedback.
Question by:fjkaykr11
LVL 48

Assisted Solution

PortletPaul earned 50 total points
ID: 39198574
the term 'tree' is sometimes used as a way to describe a hierarchical query, in TSQL these typically require "recursion" and CTEs are a good method for this.

refer to this article perhaps:
a CTE approach is discsssed there (referring to a BOM which is a hierarchy or 'tree')
LVL 23

Assisted Solution

Racim BOUDJAKDJI earned 225 total points
ID: 39198644
You can use the following methodologies to represent hierarchies:

> Nested Set
> Materialized Path
> Adjacency

None of the above require recursion.
LVL 23

Assisted Solution

Racim BOUDJAKDJI earned 225 total points
ID: 39198898
If your tree has a high number of levels, recursion is to be avoided to prevent excessive locking.
Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

LVL 48

Assisted Solution

PortletPaul earned 50 total points
ID: 39198930
opinions differ (on almost all sql topics :), e.g.
... the simplicity of adjacency list implementation and management, make adjacency list a preferred way to store hierarchical data in SQL Server versions that support recursive CTEs, that is versions from 2005 onwards.
(emphasis added), see

the article given earlier also presents alternative approaches.
LVL 16

Accepted Solution

Surendra Nath earned 225 total points
ID: 39199165
Hi There

To simplify the things over here, the SQL Tree is nothing different from a family tree, that we all are most familiar with.... A parent will have children.. grand children.. grand grand childrens......

in the a tree the parent is called the parent node and the young generation of the family is called the leaf node.

Now, how this tree can be applied in T-SQL...
Let us assume you have a table named schema as below


now the data in the table can be as below

Employee_ID    Employee_Name    Reporting_manager
1                           FRED                          none
2                           Surendra                   FRED
3                           Neo                             FRED
4                           Jarvis                          Surendra

now, if we want to know the reporting hierarchy for the employees... then this is how it will be

Surendra  & Neo will be directly reporting to FRED, and Jarvis will be reporting to Surendra who inturn reports to Fred.

This is a organizational tree, if we need to find out who reports to who kind of quries, it can be done using recursion using CTE or usual subqueries or Cursors...
But the fast apporach is with CTE.
LVL 23

Assisted Solution

Racim BOUDJAKDJI earned 225 total points
ID: 39199204
<<opinions differ (on almost all sql topics :), >>
Fair enough but looking at the example provided, the OP only shows he does not know how to implement nested sets on SQL Server and blames poor performance not realizing he does not understand how to implement them:

> First, he does not understand that right/left are to be on the same table for browsing a specific hierarchy.  He uses an example of a JOIN operation between 2 hierarchies to conclude for poor performance.  Typically, the left and right sides on nested set are columns not tables.
> Second as a consequence of the above, he uses a JOIN operation to justify poor performance
> Third, on a nested set representation, leafs and ancestors are obtained  according the difference between right and left values: all descendants are obtained according to the fact that the difference between the rich and left is always 1.  All ancestors are obtained as having the largest differences between right and left values AND including a specific value.  In other words, the OP says he is using nested set when he is not.

For what it is worth, I have above 10 level deep data warehouses running BI hierarchies returning real time grouped aggregates to report users and the slowest query I have is one second.  This is simply impossible using adjacency lists.

I recommend nested sets when browsing, aggregation and tree depth become important and adjacency lists in other cases because they are easier to implement.

Hope this helps.
LVL 23

Assisted Solution

Racim BOUDJAKDJI earned 225 total points
ID: 39199213

Author Closing Comment

ID: 39199573
Great responses.   @Racimo and @NeoJarvis -- thank you for providing specific examples of what I am looking to grasp.

Featured Post

Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
A phishing scam that claims a recipient’s credit card details have been “suspended” is the latest trend in spoof emails.
Via a live example, show how to extract information from SQL Server on Database, Connection and Server properties
Viewers will learn how to use the INSERT statement to insert data into their tables. It will also introduce the NULL statement, to show them what happens when no value is giving for any given column.

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question