0Pricing
SQL Academy · Lektion

Sequenzen und Reihen erzeugen

Mit Rekursion Zeilen erzeugen

Sequenzen und Reihen erzeugen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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 Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist eine generierte Folge?

Manchmal benötigen Sie eine Liste von Zahlen, Datumswerten oder anderen aufeinanderfolgenden Werten, die in keiner Tabelle vorhanden sind. Mit SQL können Sie solche Werte mithilfe von Rekursion oder integrierten Funktionen spontan erzeugen.

In dieser Lektion lernen Sie, wie Sie Sequenzen mit WITH RECURSIVE erzeugen — einem leistungsfähigen Werkzeug, mit dem eine Abfrage auf ihre eigene Ausgabe verweisen kann.

Ihre erste rekursive CTE

Eine rekursive CTE (Common Table Expression) besteht aus zwei Teilen, die durch UNION ALL verbunden werden: einem Basisfall, der die erste Zeile erzeugt, und einem rekursiven Schritt, der auf die CTE selbst verweist, um die nächste Zeile zu erzeugen.

Die Rekursion endet, wenn der rekursive Schritt keine Zeilen zurückgibt.

WITH RECURSIVE counter(n) AS (
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM counter WHERE n < 5
)
SELECT n FROM counter;

Wie die Rekursion abläuft

Es hilft, jeden Schritt einzeln zu betrachten. Der Basisfall legt den Grundbestand der Tabelle an, danach fügt jeder rekursive Durchlauf eine weitere Zeile hinzu, bis die WHERE-Bedingung nicht mehr erfüllt ist.

Für die Abfrage WHERE n < 5 erzeugt die Engine die Zeilen 1, 2, 3, 4, 5 und hält dann an, weil 5 < 5 falsch ist.

WITH RECURSIVE steps(n, note) AS (
  SELECT 1, 'base case'
  UNION ALL
  SELECT n + 1, 'recursive step'
  FROM steps
  WHERE n < 4
)
SELECT n, note FROM steps;

Gerade Zahlen erzeugen

Sie können die Schrittweite ändern, indem Sie im rekursiven Teil einfach einen Wert größer als 1 addieren. Dadurch werden alle geraden Zahlen von 2 bis 10 erzeugt.

Das Muster lautet immer: next_value = current_value + step.

WITH RECURSIVE evens(n) AS (
  SELECT 2
  UNION ALL
  SELECT n + 2 FROM evens WHERE n < 10
)
SELECT n FROM evens;

Rückwärts zählen

Rekursion ist nicht auf aufsteigendes Zählen beschränkt. Ziehen Sie statt zu addieren, erhalten Sie eine absteigende Sequenz. Achten Sie darauf, dass die Abbruchbedingung > statt < verwendet, um eine Endlosschleife zu vermeiden.

WITH RECURSIVE countdown(n) AS (
  SELECT 10
  UNION ALL
  SELECT n - 1 FROM countdown WHERE n > 1
)
SELECT n FROM countdown;

Einen Datumsbereich erzeugen

Eine der praktischsten Anwendungen rekursiver CTEs ist das Erstellen einer Datumsfolge. Sie beginnen bei einem bestimmten Datum und addieren so lange jeweils einen Tag, bis Sie ein Enddatum erreichen.

Das ist besonders nützlich, um Lücken in Berichten zu füllen — jeder Tag erscheint, auch wenn für diesen Tag keine Daten vorhanden sind.

WITH RECURSIVE dates(d) AS (
  SELECT DATE '2024-01-01'
  UNION ALL
  SELECT d + INTERVAL '1 day'
  FROM dates
  WHERE d < DATE '2024-01-07'
)
SELECT d FROM dates;

Berichtslücken mit einer Datumsfolge füllen

Stellen Sie sich eine Tabelle sales vor, die nur an Tagen Zeilen enthält, an denen Verkäufe stattgefunden haben. Wenn Sie eine erzeugte Datumsfolge mit einem LEFT JOIN mit der Verkaufstabelle verknüpfen, erhalten Sie jeden Tag des Bereichs — mit NULL an Tagen ohne Verkäufe.

WITH RECURSIVE cal(d) AS (
  SELECT DATE '2024-03-01'
  UNION ALL
  SELECT d + INTERVAL '1 day' FROM cal WHERE d < DATE '2024-03-05'
),
sales(sale_date, amount) AS (
  VALUES
    (DATE '2024-03-01', 100),
    (DATE '2024-03-03', 250),
    (DATE '2024-03-05', 180)
)
SELECT cal.d, COALESCE(sales.amount, 0) AS amount
FROM cal
LEFT JOIN sales ON cal.d = sales.sale_date
ORDER BY cal.d;

Eine Multiplikationstabelle erzeugen

Rekursive CTEs können mehrere Spalten weiterführen und so aussagekräftigere Ausgaben erzeugen. Hier werden gleichzeitig ein Zeilenindex und ein berechneter Wert verfolgt.

WITH RECURSIVE mult(n, result) AS (
  SELECT 1, 1 * 7
  UNION ALL
  SELECT n + 1, (n + 1) * 7
  FROM mult
  WHERE n < 10
)
SELECT n, result AS seven_times_n FROM mult;

Fibonacci-Zahlen

Fibonacci ist eine klassische Folge, in der jede Zahl die Summe der beiden vorherigen ist: 0, 1, 1, 2, 3, 5, 8 …

Eine rekursive CTE verfolgt sowohl den aktuellen Wert a als auch den nächsten Wert b und vertauscht sie in jedem Schritt.

WITH RECURSIVE fib(a, b) AS (
  SELECT 0, 1
  UNION ALL
  SELECT b, a + b FROM fib WHERE a < 100
)
SELECT a AS fibonacci FROM fib;

generate_series in PostgreSQL verwenden

PostgreSQL bietet eine integrierte Abkürzung namens generate_series(), die Folgen erzeugt, ohne dass Sie eine rekursive CTE schreiben müssen. Sie akzeptiert einen Startwert, einen Endwert und eine optionale Schrittweite.

Das ist die kürzeste Möglichkeit, in PostgreSQL Zahlen- oder Datumsbereiche zu erzeugen.

SELECT gs AS num
FROM generate_series(1, 10, 2) AS gs;

Monatliche Intervalle erzeugen

Übergeben Sie '1 month' an generate_series(), um einen Monatskalender aufzubauen. Das ist ideal, um monatliche Berichtskopfzeilen zu erstellen oder zu prüfen, in welchen Monaten keine Daten vorhanden sind.

SELECT gs::DATE AS month_start
FROM generate_series(
  '2024-01-01'::DATE,
  '2024-06-01'::DATE,
  INTERVAL '1 month'
) AS gs;

Wissenstest

Testen Sie Ihr Verständnis vom Erzeugen von Folgen mit rekursiven CTEs.

Zusammenfassung: Folgen und Sequenzen erzeugen

In dieser Lektion haben Sie gelernt, wie Sie Zahlen- und Datumssequenzen ohne Quelltabelle erzeugen:

  • WITH RECURSIVE — ein Basisfall und ein rekursiver Schritt, die mit UNION ALL verbunden werden; die Rekursion endet, wenn der rekursive Schritt keine Zeilen zurückgibt.
  • Flexible Schrittweite — addieren oder subtrahieren Sie einen beliebigen Wert, um aufwärts oder abwärts zu zählen oder Werte zu überspringen.
  • Datumsbereiche — addieren Sie ein Intervall, um tägliche, monatliche oder benutzerdefinierte Kalenderfolgen zu erzeugen.
  • CTEs mit mehreren Spalten — führen Sie zusätzlichen Zustand über mehrere Iterationen weiter, um aussagekräftigere Ausgaben wie Fibonacci zu erzeugen.
  • generate_series() — die integrierte PostgreSQL-Funktion für besonders kompakte Zahlen- und Datumssequenzen.

Generierte Folgen sind unverzichtbar, um Lücken in Berichten zu füllen, Testdaten zu erstellen und überall dort, wo Sie unabhängig vom Datenbestand einen vollständigen Wertebereich benötigen.

Häufig gestellte Fragen

Ist die Lektion „Sequenzen und Reihen erzeugen“ kostenlos?

Ja — der vollständige Text von „Sequenzen und Reihen erzeugen“ 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 Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Sequenzen und Reihen erzeugen“?

Mit Rekursion Zeilen erzeugen Du übst SQL Academy 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 Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy 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 3 von 4.

Wie lange dauert die Lektion „Sequenzen und Reihen erzeugen“?

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 Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-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. So funktionieren rekursive CTEs
  2. Einen Kategoriebaum durchlaufen
  3. Sequenzen und Reihen erzeugen
  4. Endlosschleifen vermeiden
← Zurück zu SQL Academy