Lucrul cu interogări recursive

Interogări ierarhice și recursive în SQL Server

Jasmin Ludolf

Content Developer

Ierarhia unei organizații IT

Organizația este descrisă prin:

  • ID - ID-ul angajatului
  • Name - Numele angajatului
  • JobTitle - Funcția în companie
  • Department - Departamentul din companie
  • Supervisor - Superiorul în companie

Câmpuri care descriu ierarhia:

  • ID
  • Supervisor

Angajatul 2 îl are ca superior pe Angajatul 1

Interogări ierarhice și recursive în SQL Server

Organizația IT

+-----------------------+---------------------+------------+------------+
|ID | Name              | Position            | Department | Supervisor |    
|-----------------------|---------------------|------------|------------|
| 1 | Heinz Griesser    | IT Director         | IT         | 0          |
| 2 | Andreas Sitter    | Security Manager    | IT         | 1          |
| 3 | Thomas Bergman    | Innovation Manager  | IT         | 1          |
| 4 | Hannes Berg       | Operation Manager   | IT         | 1          |
| 5 | Anna Kruggel      | Administrator       | IT         | 4          |
| 6 | Karin Pacher      | Developer           | IT         | 4          |
+-----------------------+---------------------+------------+------------+
Interogări ierarhice și recursive în SQL Server

Sarcini frecvente pentru date ierarhice

Obținerea ierarhiei unui înregistrări

Cine este superiorul dumneavoastră?


Obținerea nivelului ierarhiei

Determinați nivelul ierarhic al unei organizații


Combinarea rezultatelor recursiei într-un câmp

Ce superiori am?

Interogări ierarhice și recursive în SQL Server

Obținerea ierarhiei

WITH hierarchy AS (
    SELECT ID,Supervisor
        FROM employee 
        WHERE supervisor = 0

UNION ALL SELECT emp.ID, emp.Supervisor FROM employee emp
JOIN hierarchy ON emp.Supervisor = hierarchy.ID) SELECT * FROM hierarchy
Interogări ierarhice și recursive în SQL Server

Obținerea ierarhiei

+---+-----------+
|ID |Supervisor |
|---|-----------|
|1  | 0         |
|2  | 1         |
|3  | 2         |
+---+-----------+
Interogări ierarhice și recursive în SQL Server

Obținerea nivelului ierarhiei

WITH hierarchy AS (
    SELECT ID, Supervisor, 1 as LEVEL
        FROM employee
           WHERE Supervisor = 0

UNION ALL SELECT emp.ID, emp.Supervisor, LEVEL + 1 FROM employee emp
JOIN hierarchy ON emp.Supervisor = hierarchy.ID ) SELECT * FROM hierarchy
Interogări ierarhice și recursive în SQL Server

Obținerea nivelului ierarhiei

+---+-----------+-------|
|ID |Supervisor | Level |
|---|-----------|-------|
|1  | 0         | 0     |
|2  | 1         | 1     |
+---+-----------+-------+
Interogări ierarhice și recursive în SQL Server

Combinarea rezultatelor recursiei într-un câmp

WITH hierarchy AS (
    SELECT ID, Supervisor, CAST('0' AS VARCHAR(MAX)) as PATH
        FROM employee
        WHERE Supervisor = 0

UNION ALL SELECT emp.ID, emp.Supervisor, Path + '->' + CAST(emp.Supervisor AS VARCHAR(MAX)) FROM employee emp INNER JOIN hierarchy ON emp.Supervisor = hierarchy.ID ) SELECT * FROM hierarchy
Interogări ierarhice și recursive în SQL Server

Combinarea rezultatelor recursiei într-un câmp

+-----+--------+
| PATH         |
|--------------|
| 0 -> 1 -> 4  |
+-----+--------+
Interogări ierarhice și recursive în SQL Server

Să interogăm organizația IT

Interogări ierarhice și recursive în SQL Server

Preparing Video For Download...