Wie unterscheiden sich rekursive und nicht-rekursive Ausdrücke in Common Table Expressions (CTE) in SQL?
sobes.tech KI
Antwort von AI
Die Common Table Expression (CTE) in SQL ist ein temporäres Ergebnis, das in der Hauptabfrage verwendet werden kann. Es gibt zwei Arten von CTEs: rekursive und nicht rekursive.
-
Nicht-rekursive CTE: ist einfach eine benannte temporäre Datenmenge, die durch eine einzelne Abfrage definiert ist. Sie kann verwendet werden, um komplexe Abfragen zu vereinfachen oder Unterabfragen wiederzuverwenden.
-
Rekursive CTE: ist eine CTE, die sich selbst referenziert, was rekursive Operationen ermöglicht, z.B. das Durchlaufen von Hierarchien oder Graphen.
Beispiel für eine nicht-rekursive CTE:
WITH RecentOrders AS (
SELECT * FROM Orders WHERE OrderDate > '2024-01-01'
)
SELECT * FROM RecentOrders WHERE CustomerID = 123;
Beispiel für eine rekursive CTE (Suche aller Untergebenen eines Mitarbeiters):
WITH RECURSIVE Subordinates AS (
SELECT EmployeeID, ManagerID, Name FROM Employees WHERE EmployeeID = 1 -- Chef
UNION ALL
SELECT e.EmployeeID, e.ManagerID, e.Name
FROM Employees e
INNER JOIN Subordinates s ON e.ManagerID = s.EmployeeID
)
SELECT * FROM Subordinates;
Auf diese Weise ermöglichen rekursive CTEs den Aufbau von Ketten und Hierarchien, während nicht-rekursive CTEs die Struktur der Abfrage vereinfachen.