0Pricing
SQL Academy · Lektion

Der CASE-Ausdruck

IF/THEN-Logik innerhalb einer Abfrage

Der CASE-Ausdruck ist eine kostenlose SQL Academy-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 Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Verzweigungslogik in SQL

Manchmal soll eine Abfrage eine Entscheidung treffen: Wenn dies zutrifft, dann das, andernfalls etwas anderes. SQL stellt dafür den CASE-Ausdruck bereit.

Mit CASE können Sie direkt in einem SELECT abhängig von Bedingungen unterschiedliche Werte zurückgeben. Stellen Sie es sich als SQL-Variante einer if/else-Kette vor.

SELECT name,
       CASE WHEN price > 100 THEN 'expensive'
            ELSE 'affordable'
       END AS price_band
FROM products;

Aufbau eines CASE-Ausdrucks

Ein CASE-Ausdruck besteht aus einigen Teilen:

  • WHEN condition THEN value — ein oder mehrere Zweige
  • ELSE value — ein optionaler Ersatzwert
  • END — schließt den Ausdruck ab (erforderlich!)

SQL wertet die WHEN-Zweige von oben nach unten aus und gibt den Wert des ersten Zweigs zurück, dessen Bedingung wahr ist.

CASE WHEN condition1 THEN result1
     WHEN condition2 THEN result2
     ELSE default_result
END

CASE liefert einen Wert

Die entscheidende Idee: Ein CASE-Ausdruck ergibt pro Zeile einen einzelnen Wert. Da er einen Wert erzeugt, können Sie ihn überall dort verwenden, wo ein Wert zulässig ist — in der SELECT-Liste, in WHERE, in ORDER BY und sogar innerhalb von Funktionen.

Hier wird jede Bestellung mit einem einfachen Status versehen.

SELECT order_id,
       CASE WHEN shipped_at IS NOT NULL THEN 'shipped'
            WHEN paid_at IS NOT NULL THEN 'paid'
            ELSE 'pending'
       END AS status
FROM orders;

Der erste Treffer zählt

Die Reihenfolge ist wichtig. SQL prüft jedes WHEN der Reihe nach und stoppt beim ersten wahren. Spätere Zweige werden ignoriert, selbst wenn sie ebenfalls zutreffen würden.

Unten ist eine Bestellung über 1000 'large' und niemals 'medium', weil der erste passende Zweig gewinnt.

SELECT order_id, total,
       CASE WHEN total >= 1000 THEN 'large'
            WHEN total >= 100  THEN 'medium'
            ELSE 'small'
       END AS size_band
FROM orders;

Der ELSE-Zweig

Der ELSE-Zweig fängt alle übrigen Fälle ab. Wenn keine der WHEN-Bedingungen wahr ist, gibt CASE den Wert von ELSE zurück.

Wenn Sie ELSE weglassen und nichts zutrifft, gibt CASE NULL zurück. Das ist eine häufige Ursache für unerwartete NULL-Werte. Fügen Sie daher einen expliziten ELSE-Zweig hinzu, wenn Sie einen definierten Ersatzwert benötigen.

SELECT name,
       CASE WHEN stock = 0 THEN 'out of stock' END AS note
FROM products;
-- rows with stock > 0 get NULL in note (no ELSE)

Bedingungen können beliebig sein

Eine WHEN-Bedingung ist einfach ein boolescher Ausdruck — derselbe Typ, den Sie auch in einer WHERE-Klausel schreiben. Sie können Vergleiche, AND, OR, BETWEEN, IN, LIKE und vieles mehr verwenden.

SELECT email,
       CASE WHEN country IN ('US','CA') AND age >= 18 THEN 'eligible'
            WHEN email LIKE '%@test.com'             THEN 'test account'
            ELSE 'review'
       END AS segment
FROM users;

Ergebnistypen müssen kompatibel sein

Jeder Zweig eines CASE-Ausdrucks muss Werte eines kompatiblen Typs zurückgeben, da die Spalte einen einheitlichen Typ benötigt. Das Mischen von Text und Zahlen führt zu einem Fehler oder zu unerwarteten Typumwandlungen.

Wenn Sie in einem Zweig Zahlen und in einem anderen Text benötigen, wandeln Sie die Typen ausdrücklich um, damit sie zusammenpassen.

SELECT product_id,
       CASE WHEN on_sale THEN price * 0.9
            ELSE price
       END AS effective_price   -- all branches numeric: good
FROM products;

CASE in WHERE verwenden

Da CASE einen Wert erzeugt, können Sie sein Ergebnis in einer WHERE-Klausel vergleichen. Das ist bei dynamischen Filterregeln hilfreich.

Oft ist eine einfache boolesche Logik in WHERE jedoch verständlicher. Verwenden Sie CASE in WHERE nur dann, wenn die Verzweigung die Bedingung tatsächlich vereinfacht.

SELECT *
FROM orders
WHERE CASE WHEN priority = 'high' THEN total > 0
           ELSE total > 500
      END;

CASE verschachteln

Sie können einen CASE-Ausdruck innerhalb eines anderen CASE-Zweigs platzieren, um mehrstufige Logik auszudrücken. Das funktioniert, aber tief verschachtelte Ausdrücke werden schwer lesbar.

Halten Sie die Verschachtelung flach. Wenn sie wächst, ist eine separate Spalte oder eine Nachschlagetabelle meist übersichtlicher.

SELECT order_id,
       CASE WHEN region = 'EU' THEN
              CASE WHEN total > 100 THEN 'EU big'
                   ELSE 'EU small' END
            ELSE 'other'
       END AS bucket
FROM orders;

CASE mit Aggregatfunktionen

Ein leistungsfähiges Muster besteht darin, einen CASE-Ausdruck in eine Aggregatfunktion wie SUM oder COUNT einzuschließen. So zählen oder summieren Sie Zeilen bedingt in einem einzigen Durchlauf — dies wird manchmal als bedingte Aggregation oder Pivot bezeichnet.

SELECT
  COUNT(*) AS total_orders,
  SUM(CASE WHEN status = 'shipped' THEN 1 ELSE 0 END) AS shipped,
  SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending
FROM orders;

CASE absichtlich NULL liefern lassen

NULL aus einem Zweig zurückzugeben, ist manchmal genau das Richtige — etwa um einen Wert auszublenden, den Sie nicht anzeigen möchten, oder um ihn einer späteren Aggregatfunktion zu übergeben, die NULL-Werte ignoriert.

Hier behalten nur große Bestellungen ihre Summe. Bei den übrigen wird NULL gesetzt, sodass AVG sie überspringen würde.

SELECT order_id,
       CASE WHEN total >= 1000 THEN total
            ELSE NULL
       END AS large_order_total
FROM orders;

Schnelltest

Betrachten Sie diesen Ausdruck für eine Zeile, in der total = 1500 steht:

CASE WHEN total >= 100 THEN 'medium' WHEN total >= 1000 THEN 'large' ELSE 'small' END

Welchen Wert gibt er zurück?

Zusammenfassung: Der CASE-Ausdruck

Sie haben die Grundlagen der bedingten Logik in SQL gelernt:

  • CASE WHEN ... THEN ... ELSE ... END gibt pro Zeile einen Wert zurück
  • Die Zweige werden von oben nach unten geprüft; der erste Treffer entscheidet
  • Wenn ELSE weggelassen wird, ergibt sich NULL, wenn nichts übereinstimmt
  • Alle Zweige müssen kompatible Datentypen zurückgeben
  • CASE funktioniert in SELECT, WHERE und innerhalb von Aggregatfunktionen

Als Nächstes vergleichen wir die beiden syntaktischen Formen von CASE.

SELECT name,
       CASE WHEN price > 100 THEN 'expensive'
            WHEN price > 20  THEN 'mid'
            ELSE 'cheap'
       END AS tier
FROM products;

Häufig gestellte Fragen

Ist die Lektion „Der CASE-Ausdruck“ kostenlos?

Ja — der vollständige Text von „Der CASE-Ausdruck“ 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 „Der CASE-Ausdruck“?

IF/THEN-Logik innerhalb einer Abfrage 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 1 von 4.

Wie lange dauert die Lektion „Der CASE-Ausdruck“?

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. Der CASE-Ausdruck
  2. Gesuchtes und einfaches CASE
  3. Daten kategorisieren und beschriften
  4. CASE in ORDER BY und Aggregationen
← Zurück zu SQL Academy