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 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.