0Pricing
SQL Interview Prep · Lektion

Ihre erste CTE schreiben

Die grundlegende WITH-Syntax und Situationen, in denen eine CTE übersichtlicher als eine Unterabfrage ist

Ihre erste CTE schreiben ist eine kostenlose SQL Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Was eine CTE tatsächlich ist

Eine Common Table Expression (CTE) ist eine benannte, temporäre Ergebnismenge, die mit dem Schlüsselwort WITH definiert wird und nur für die Dauer einer einzelnen Abfrage existiert. Interviewer schätzen CTEs, weil sie zeigen, ob Sie Logik klar strukturieren können.

Stellen Sie sich eine CTE so vor, dass Sie einer Unterabfrage einen Namen geben und sie dadurch in der anschließenden Hauptanweisung wie eine Tabelle referenzieren können. Sie erstellt kein dauerhaftes Objekt und verschwindet, sobald die Abfrage beendet ist.

Die grundlegende WITH-Syntax

Jede CTE beginnt mit WITH, einem Namen, dem Schlüsselwort AS und einer in Klammern gesetzten Abfrage. Nach der schließenden Klammer schreiben Sie eine normale Anweisung, die die CTE über ihren Namen verwendet.

  • WITH cte_name AS ( ... ) definiert den Block.
  • Die Abfrage direkt nach der Klammer ist die Hauptabfrage.
  • Der Name der CTE verhält sich wie eine Tabelle, aus der Sie SELECT ausführen können.
WITH recent_orders AS (
    SELECT *
    FROM orders
    WHERE order_date >= '2024-01-01'
)
SELECT *
FROM recent_orders;

Warum nicht einfach eine Unterabfrage verwenden?

Dieselbe Logik kann als Inline-Unterabfrage in der FROM-Klausel geschrieben werden. Warum fragen Interviewer also nach CTEs?

  • Lesbarkeit: Ein benannter Schritt liest sich von oben nach unten wie ein Rezept.
  • Wiederverwendung: Sie können dieselbe CTE mehrfach referenzieren, statt eine Unterabfrage zu wiederholen.
  • Fehleranalyse: Sie können nur die CTE auswählen, um sie zu prüfen.

Die richtige Antwort im Vorstellungsgespräch lautet normalerweise: Verwenden Sie eine CTE, wenn sie die Abfrage leichter lesbar und wartbarer macht.

Durchgespieltes Beispiel: Filtern und anschließend aggregieren

Angenommen, die Frage lautet: Ermitteln Sie den Gesamtumsatz aus Bestellungen, die in diesem Jahr aufgegeben wurden. Mit einer CTE können Sie den Filterschritt isolieren und anschließend das benannte Ergebnis aggregieren.

Die Hauptabfrage behandelt recent_orders so, als wäre es eine echte Tabelle. Dadurch bleibt die Aggregation übersichtlich und offensichtlich.

WITH recent_orders AS (
    SELECT amount
    FROM orders
    WHERE order_date >= '2024-01-01'
)
SELECT SUM(amount) AS total_revenue
FROM recent_orders;

Die Ausgabespalten benennen

Sie können die von einer CTE bereitgestellten Spalten umbenennen, indem Sie sie direkt nach dem Namen der CTE auflisten. Das ist hilfreich, wenn die innere Abfrage Ausdrücke erzeugt oder Sie nachgelagert eindeutigere Namen verwenden möchten.

Wenn Sie eine Spaltenliste angeben, muss sie mit der Anzahl der von der inneren Abfrage zurückgegebenen Spalten übereinstimmen, andernfalls meldet die Datenbank einen Fehler.

WITH revenue (region, total) AS (
    SELECT region, SUM(amount)
    FROM orders
    GROUP BY region
)
SELECT region, total
FROM revenue
ORDER BY total DESC;

Eine CTE ist nur eine benannte Abfrage

Ein Denkmodell, das Interviewer beeindruckt: Eine CTE ist logisch gleichbedeutend damit, ihre Definition inline einzusetzen. Die Datenbank kann entscheiden, sie inline einzusetzen oder zu materialisieren, aber semantisch ist das Ergebnis dasselbe, als hätten Sie die Unterabfrage eingefügt.

Das bedeutet, dass alles, was in einem regulären SELECT zulässig ist, auch innerhalb einer CTE zulässig ist: Joins, GROUP BY, WHERE, Fensterfunktionen und mehr.

Tiefergehendes Beispiel: CTE mit einem Join

CTEs spielen ihre Stärken aus, wenn Sie eine Seite eines Joins vorab aufbereiten müssen. Hier erstellen wir zunächst eine Bestellanzahl pro Kunde und verbinden sie anschließend wieder mit der Kundentabelle, sodass jede Kundenzeile ihre Gesamtzahl enthält.

Beachten Sie, wie die Hauptabfrage fast wie natürlichsprachlicher Text wirkt: aus Kunden, verbunden mit ihren Bestellanzahlen.

WITH order_counts AS (
    SELECT customer_id, COUNT(*) AS num_orders
    FROM orders
    GROUP BY customer_id
)
SELECT c.name, oc.num_orders
FROM customers c
JOIN order_counts oc
    ON oc.customer_id = c.id;

Wo eine CTE in der Abfrage steht

Der WITH-Block muss vor der Anweisung stehen, die ihn verwendet. Die CTE ist nur für die einzelne Anweisung sichtbar, die unmittelbar auf ihre Definition folgt.

  • Sie können eine CTE nicht in einer späteren, separaten Abfrage referenzieren.
  • Eine für ein SELECT definierte CTE kann nicht von einem anderen SELECT wiederverwendet werden, das danach ausgeführt wird.
  • Der Gültigkeitsbereich endet mit dem Semikolon, das die Anweisung abschließt.

CTEs funktionieren mit INSERT, UPDATE und DELETE

Eine häufige Nachfrage: CTEs sind nicht auf SELECT beschränkt. In den meisten modernen Datenbanken können Sie auch an datenändernde Anweisungen eine WITH-Klausel anhängen.

So können Sie eine Zeilenmenge einmal berechnen und anschließend mit ihr arbeiten. Das ist deutlich übersichtlicher als eine verschachtelte Unterabfrage innerhalb der WHERE-Klausel.

WITH stale AS (
    SELECT id
    FROM sessions
    WHERE last_seen < NOW() - INTERVAL '30 days'
)
DELETE FROM sessions
WHERE id IN (SELECT id FROM stale);

Häufige Fehler von Anfängern

Interviewer achten auf folgende Fehler:

  • Die Hauptabfrage nach der CTE zu vergessen; ein WITH-Block allein ist keine vollständige Anweisung.
  • Zwischen der CTE und der Hauptabfrage ein Semikolon zu setzen.
  • Zu erwarten, dass die CTE über mehrere Anweisungen hinweg bestehen bleibt.
  • Eine optionale Spaltennamensliste zu verwenden, deren Anzahl nicht mit den Spalten der inneren Abfrage übereinstimmt.

So sprechen Sie im Vorstellungsgespräch über CTEs

Wenn Sie aufgefordert werden, eine unübersichtliche Unterabfrage umzugestalten, erläutern Sie Ihre Überlegung: Ich werde diese Filter-Unterabfrage in eine CTE namens recent_orders überführen, damit die Aggregation übersichtlich bleibt.

Wenn Sie zeigen, dass Sie CTEs wegen Klarheit und Wiederverwendung und nicht blind einsetzen, signalisiert das ein gutes Niveau auf mittlerer Ebene. Erwähnen Sie, dass eine CTE eine Abfrage nicht automatisch schneller macht; ihr Hauptvorteil ist die Lesbarkeit.

Kurzer Selbsttest

Testen Sie Ihr Verständnis der grundlegenden CTE-Syntax und ihres Gültigkeitsbereichs.

Rückblick: Ihre erste CTE

Sie haben gelernt, dass eine CTE mit WITH name AS ( ... ) eine temporäre Ergebnismenge benennt und anschließend wie eine Tabelle in der folgenden Anweisung verwendet wird.

  • CTEs verbessern gegenüber Inline-Unterabfragen die Lesbarkeit, Wiederverwendbarkeit und Fehlersuche.
  • Ihr Gültigkeitsbereich ist auf eine einzige Anweisung beschränkt; danach verschwinden sie.
  • Sie funktionieren mit SELECT sowie mit INSERT/UPDATE/DELETE.
  • Sie steigern die Leistung nicht automatisch.

Als Nächstes: Mehrere CTEs zu einer Pipeline verketten.

Häufig gestellte Fragen

Ist die Lektion „Ihre erste CTE schreiben“ kostenlos?

Ja — der vollständige Text von „Ihre erste CTE schreiben“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Ihre erste CTE schreiben“?

Die grundlegende WITH-Syntax und Situationen, in denen eine CTE übersichtlicher als eine Unterabfrage ist Du übst SQL Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Interview Prep zu starten?

Keine Vorkenntnisse erforderlich. SQL Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Ihre erste CTE schreiben“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Interview Prep-Lektion Code schreiben und ausführen?

Ja. Jede SQL Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Ihre erste CTE schreiben
  2. Mehrere CTEs verketten
  3. CTE oder Unterabfrage oder temporäre Tabelle
  4. Verschachtelte Abfragen in CTEs umstrukturieren
← Zurück zu SQL Interview Prep