Verständnis von CTEs (Common Table Expressions) in SQL
James Reed
Infrastructure Engineer · Leapcell

Key Takeaways
- CTEs verbessern die Lesbarkeit und Organisation von SQL-Abfragen.
- Rekursive CTEs helfen bei der einfachen Handhabung hierarchischer Daten.
- CTEs werden breit unterstützt, verbessern aber möglicherweise nicht immer die Leistung.
Einleitung
Structured Query Language (SQL) ist ein leistungsstarkes Werkzeug zum Verwalten und Abfragen relationaler Datenbanken. Unter ihren vielen Funktionen sticht der Common Table Expression (CTE) als eine elegante und effektive Methode zur Organisation komplexer Abfragen hervor. Eingeführt in SQL:1999 und breit unterstützt von modernen Datenbanksystemen wie Microsoft SQL Server, PostgreSQL, MySQL (ab Version 8.0) und Oracle, bieten CTEs sowohl Lesbarkeit als auch Flexibilität.
Was ist ein CTE?
Ein Common Table Expression (CTE) ist ein temporäres Resultset, das innerhalb des Ausführungsbereichs einer einzelnen SQL-Anweisung definiert ist. Stellen Sie es sich als eine benannte Abfrage vor, auf die Sie innerhalb einer SELECT-, INSERT-, UPDATE- oder DELETE-Anweisung verweisen können. Im Gegensatz zu Unterabfragen können CTEs die Lesbarkeit verbessern, Rekursion unterstützen und es Ihnen ermöglichen, komplexe Operationen in einfachere, besser wartbare Teile zu zerlegen.
Syntax eines CTE
Die grundlegende Syntax eines CTE ist wie folgt:
WITH cte_name (Spalte1, Spalte2, ...) AS ( SELECT ... FROM ... WHERE ... ) SELECT * FROM cte_name;
- Das Schlüsselwort
WITH
leitet den CTE ein. cte_name
ist der Name, den Sie Ihrem temporären Resultset geben.- Innerhalb der Klammern können Sie optional Spaltennamen angeben.
- Die SELECT-Anweisung innerhalb der Klammern definiert die Daten für den CTE.
Beispiel: Verwenden eines einfachen CTE
Angenommen, Sie haben eine Tabelle namens Employees
und Sie möchten alle Mitarbeiter finden, die mehr als das Durchschnittsgehalt verdienen. Mit einem CTE können Sie Folgendes schreiben:
WITH AverageSalary AS ( SELECT AVG(Salary) AS AvgSalary FROM Employees ) SELECT Name, Salary FROM Employees, AverageSalary WHERE Employees.Salary > AverageSalary.AvgSalary;
Dieser Ansatz macht die Abfrage im Vergleich zu einer traditionellen Unterabfrage einfacher zu lesen und zu warten.
Rekursive CTEs
Eine der leistungsstärksten Anwendungen von CTEs ist die Rekursion. Rekursive CTEs ermöglichen es Ihnen, hierarchische oder baumstrukturierte Abfragen durchzuführen, z. B. das Finden aller Untergebenen eines Managers in einem Organigramm.
Hier ist ein einfaches Beispiel:
WITH RecursiveCTE AS ( SELECT EmployeeID, ManagerID, Name FROM Employees WHERE ManagerID IS NULL -- Beginnen Sie mit den/dem obersten Manager(n) UNION ALL SELECT e.EmployeeID, e.ManagerID, e.Name FROM Employees e INNER JOIN RecursiveCTE r ON e.ManagerID = r.EmployeeID ) SELECT * FROM RecursiveCTE;
Diese Abfrage gibt alle Mitarbeiter zurück, organisiert nach ihrer Managementhierarchie.
Vorteile der Verwendung von CTEs
- Verbesserte Lesbarkeit: Indem Sie Unterabfragen einen Namen geben, können Sie Ihren SQL-Code viel lesbarer und wartbarer machen.
- Modularisierung: Sie können komplexe Abfragen in logische Bausteine zerlegen.
- Rekursive Abfragen: Rekursive CTEs sind unschätzbar wertvoll für die Arbeit mit hierarchischen Daten.
- Wiederverwendung: Sie können denselben CTE mehrmals innerhalb einer Abfrage referenzieren.
Einschränkungen und Überlegungen
- Gültigkeitsbereich: CTEs sind nur innerhalb der Anweisung sichtbar, in der sie definiert sind.
- Leistung: Während CTEs die Lesbarkeit verbessern, bieten sie in einigen Fällen möglicherweise keine Leistungsvorteile gegenüber Unterabfragen oder abgeleiteten Tabellen. Überprüfen Sie immer den Abfrageplan und optimieren Sie ihn nach Bedarf.
- Nicht unterstützte Funktionen: Einige ältere Datenbanksysteme oder frühere Versionen unterstützen möglicherweise keine CTEs.
Fazit
CTEs sind eine vielseitige und wesentliche Funktion des modernen SQL. Sie helfen, komplexe Abfragen zu vereinfachen, Rekursion zu ermöglichen und die Gesamtorganisation Ihres SQL-Codes zu verbessern. Durch die Beherrschung von CTEs können Sie effizientere, lesbarere und wartbarere SQL-Abfragen schreiben.
FAQs
Ein CTE ist ein temporäres Resultset zur Organisation komplexer Abfragen.
CTEs machen SQL-Abfragen einfacher zu lesen und zu warten.
Die meisten modernen Datenbanken unterstützen CTEs, aber ältere Versionen möglicherweise nicht.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Backend-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Mehrsprachige Unterstützung
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- Zahlen Sie nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für verwertbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Null Betriebsaufwand – konzentrieren Sie sich einfach auf den Aufbau.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ