Sobes.tech
Junior — Middle

Czym różnią się wyrażenia rekurencyjne i nierrekurencyjne w wyrażeniach tabeli wspólnej (CTE) w SQL?

sobes.tech AI

Odpowiedź od AI

Wyrażenie tabeli wspólnej (CTE) w SQL to tymczasowy wynik, który można używać w głównym zapytaniu. Istnieją dwa typy CTE: rekurencyjne i nierrekurencyjne.

  • Nierrekurencyjne CTE: to po prostu nazwany tymczasowy zestaw danych zdefiniowany jednym zapytaniem. Może być używany do upraszczania złożonych zapytań lub ponownego użycia podzapytania.

  • Rekurencyjne CTE: to CTE, które odwołuje się do siebie, umożliwiając wykonywanie operacji rekurencyjnych, takich jak przechodzenie przez hierarchie lub grafy.

Przykład nierrekurencyjnego CTE:

WITH RecentOrders AS (
    SELECT * FROM Orders WHERE OrderDate > '2024-01-01'
)
SELECT * FROM RecentOrders WHERE CustomerID = 123;

Przykład rekurencyjnego CTE (wyszukiwanie wszystkich podwładnych pracownika):

WITH RECURSIVE Subordinates AS (
    SELECT EmployeeID, ManagerID, Name FROM Employees WHERE EmployeeID = 1 -- szef
    UNION ALL
    SELECT e.EmployeeID, e.ManagerID, e.Name
    FROM Employees e
    INNER JOIN Subordinates s ON e.ManagerID = s.EmployeeID
)
SELECT * FROM Subordinates;

W ten sposób, rekurencyjne CTE pozwalają budować łańcuchy i hierarchie, podczas gdy nierrekurencyjne po prostu upraszczają strukturę zapytania.