Die SQL CASE Anweisung durchläuft eine Liste von Bedingungen und gibt einen Wert zurück, wenn eine Bedingung erfüllt ist.

CASE
    WHEN Bedingung
    THEN Ergebnis
    ELSE Ergebnis
END; 
SQL Case

SQL CASE ist ganz simpel: Wenn Bedingung, dann Befehl. Sobald eine Bedingung wahr ist, stoppt CASE das Lesen und gibt das Ergebnis zurück. Wenn keine Bedingung wahr ist, gibt es den Wert in der ELSE-Klausel zurück. Wenn es keine ELSE-Klausel gibt und die Bedingungen FALSE sind, gibt es NULL zurück.

Die Bedingung ist mit den WHERE-Bedingungen zu vergleichen. Sämtliche Operatoren können hierin verwendet werden. Das Ergebnis kann ein Wert sein, oder aber eine Unterabfrage. Es können ebenfalls CASE-Ausdrücke verschachtelt werden. CASE kann mehrere WHEN und THEN Paare enthalten, um mehrere Bedingungen mit unterschiedlichen Ergebnissen zu nutzen. CASE gibt das Ergebnis der ersten wahren Bedingung aus. Das Ergebnis von ELSE wird ausgegeben, wenn alle WHEN-Bedingungen FALSE sind.

Der CASE-Ausdruck hat zwei Formate: Simple CASE und Searched CASE.

SQL Simple Case

Der Simple CASE teilt eine boolesche Bedingung auf. Die zu prüfenden Spalten werden direkt nach dem CASE aufgelistet. Darauf folgt WHEN und der zu vergleichende Wert. Der Vergleichsoperator ist hierbei auf Ist-Gleich (=) festgelegt. 

CASE Spalte
    WHEN Fall1
        THEN Ergebnis1
    WHEN Fall2
        THEN Ergebnis2
    ELSE Ergebnis3;
END 

SQL Simple Case - Beispiel

Unsere Online-Videothek FlatNix hat langsam sehr viele Kunden. Zu viele. Die Kundentabelle ist viel zu groß. Deswegen möchten wir einige Spalten kürzen. Wir wandeln jedes „Männlich“ in „M“ um, jedes „Weiblich“ in „W“ und jedes „Divers“ in „D“ um:

UPDATE Kunden
SET Geschlecht = 
    CASE Geschlecht
        WHEN 'Männlich'
            THEN 'M'
        WHEN 'Weiblich'
            THEN 'W'
        ELSE 'D'
    END; 

SQL Searched Case

Im Searched CASE befinden sich die Bedingungen zwischen den WHEN und THEN Klauseln. Mit dem Searched CASE ermöglicht man auch die Nutzung von anderen Vergleichsoperatoren bzw. auch logischen Operatoren.

CASE Selector
    WHEN Bedingung1
        THEN Ergebnis1
    WHEN Bedingung2
        THEN Ergebnis2
    ELSE Ergebnis3; 

SQL Searched Case - Beispiel

FlatNix möchte natürlich Kindern keine Horrorfilme empfehlen. Mit dem Case teilen wir die Altersklassen auf in Kind (< 12 Jahre alt), Teenager (zwischen 12 und 17 Jahre alt) und Erwachsener (18 und älter):

SELECT Vorname, Nachname
    CASE 
        WHEN Jahre_alt < 12 
            THEN 'Kind'
        WHEN Jahre_alt >= 12 AND Jahre_alt < 18 
            THEN 'Teenager'
        ELSE 'Erwachsener'
    END
FROM Kunden; 

Simple Case vs. Searched Case

Der große Unterschied zwischen dem Simple Case und Searched Case ist, dass beim Simple Case eine Spalte für jeden Fall als Bezugsspalte ausgewählt wird. Dieser kann nur den Ist-Gleich Operator (=) ausführen. Größer-/Kleiner-Als ist also nicht möglich. Für solche Fälle muss also immer der Searched Case benutzt werden. Problematisch wird der Simple Case beim Einsetzen von NULL Werten, da in den meisten SQL-Systemen das Ergebnis von „NULL = NULL“ weder TRUE noch FALSE ist. Für solche Fälle eignet sich der Searched CASE.

Der Searched Case lässt sich also flexibler anwenden, aber verlängert den Code im Vergleich zum Simple Case.

ARTIKEL TEILEN

Hast du Fragen? Hinterlasse einen Kommentar!