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.