23rd Jun 2022 10 Leseminuten Verwendung von CASE zum Hinzufügen von Logik zu einer SELECT-Anweisung Dorota Wdzięczna CASE WHEN Inhaltsverzeichnis CASE-Syntax CASE: Das einfache Format Verwendung von Aliasen in CASE-Anweisungen Verwendung von CASE mit anderen Datentypen Der gesuchte CASE-Ausdruck Verwendung von CASE mit LIKE Verwendung von CASE mit IN Anordnen von Bedingungen in CASE Mehr über den SQL CASE-Ausdruck lernen Wenn Sie eine SQL-Abfrage schreiben, müssen Sie möglicherweise Werte aus mehreren Spalten abrufen und Werte von einer Form in eine andere ändern. Eine einfache Möglichkeit, dieses Ziel zu erreichen, ist das Hinzufügen eines CASE Ausdrucks zu Ihrer SELECT Anweisung. In diesem Artikel werden Sie mit der Syntax, den Formaten und der Verwendung des CASE Ausdrucks vertraut gemacht. Der CASE Ausdruck ist ein bedingter Ausdruck: Er wertet Daten aus und gibt ein Ergebnis zurück. Das zurückgegebene Ergebnis hängt davon ab, ob die Daten bestimmte Kriterien erfüllen. Dieser Ausdruck kann in den Anweisungen SELECT, UPDATE und DELETE oder in den Klauseln WHERE, IN, LIKE, ORDER BY und HAVING verwendet werden. Wir werden uns auf die Anweisung SELECT konzentrieren und die Operatoren IN und LIKE verwenden. Sie sollten wissen, dass es zwei Arten von CASE Ausdrücken gibt: einfache und gesuchte. Wir werden uns beide ansehen, aber zunächst werden wir mit der grundlegenden Syntax dieses Ausdrucks beginnen. CASE-Syntax Die grundlegende Syntax des Ausdrucks CASE wird im Folgenden dargestellt: CASE [ column or expression ] WHEN value or condition THEN when_result ... ELSE else_result END Der Ausdruck beginnt mit dem Schlüsselwort CASE und endet mit dem Schlüsselwort END. Die Namen bestimmter Spalten oder Ausdrücke werden nach dem Schlüsselwort CASE eingegeben. Die Schlüsselwörter WHEN und THEN definieren die logischen Bedingungen. Nach der WHEN -Klausel steht die Bedingung oder der zu vergleichende Wert; das THEN bestimmt das Ergebnis, wenn die Bedingung erfüllt ist. Eine optionale Anweisung ELSE bestimmt das Ergebnis, das zurückgegeben wird, wenn die Bedingung WHEN nicht erfüllt ist. Wenn ELSE nicht definiert ist und WHEN nicht erfüllt ist, wird NULL zurückgegeben. Es gibt zwei Arten von CASE Ausdrücken: einfache und gesuchte. Beide haben eine etwas andere Syntax und funktionieren auch etwas anders. Wir beginnen mit dem einfachen Format. CASE: Das einfache Format Das einfache CASE vergleicht einen Wert mit einer oder mehreren WHEN Bedingungen. Wenn er eine WHEN Bedingung erfüllt, wird das THEN Ergebnis zurückgegeben. Die Syntax sieht folgendermaßen aus: CASE column_or_expression WHEN value THEN when_result ... ELSE else_result END In einem einfachen CASE Ausdruck ist der Name der Spalte oder des Ausdrucks, der ausgewertet werden soll, unbedingt erforderlich. Er steht nach dem Schlüsselwort CASE. Der eingestellte Wert steht nach dem WHEN. Wenn der ausgewertete Wert gleich dem eingestellten Wert ist, wird das in THEN definierte Ergebnis zurückgegeben. Wenn der Wert aus der Spalte oder dem Ausdruck mit keinem der Werte von WHEN übereinstimmt, wird das Ergebnis von ELSE angezeigt. Denken Sie daran, dass ELSE optional ist. Die folgenden Beispielabfragen basieren auf Daten aus der Tabelle animal Tabelle, wie unten gezeigt: id name weight country number_of_animal zoo 1 Tiger 120 Russia 3 1 2 African elephant 4 800 Congo 5 1 3 Lion 175 Turkey 1 1 4 Koala 9 Australia 2 NULL 5 Giraffe 800 5 2 6 Gaur NULL China 2 1 7 Okapi 225 NULL 5 0 Sehen Sie sich diese einfache CASE an: CASE zoo WHEN 1 THEN 'Brookfield Zoo' WHEN 2 THEN 'Dublin zoo' ELSE 'unknown' END Dieses Beispiel wählt Daten aus der Tabelle animal Tabelle aus und zeigt den Namen des aktuellen Zoos des Tieres an. Wenn zoo=1, dann wird Brookfield Zoo angezeigt; wenn zoo=2, dann wird Dublin Zoo angezeigt; alle anderen Fälle werden als unknown angezeigt. Das Ergebnis ist: name zoo case Tiger 1 Brookfield Zoo African elephant 1 Brookfield Zoo Lion 1 Brookfield Zoo Koala NULL unknown Giraffe 2 Dublin zoo Gaur 1 Brookfield Zoo Okapi 0 unknown Beachten Sie, dass das Ergebnis unknown lautet, wenn der Wert aus der Zoospalte nicht mit einem der Werte in den WHEN -Klauseln übereinstimmt (oder NULL ist). Bis jetzt haben wir einfache CASE Ausdrücke betrachtet, die einen Spaltennamen nach dem CASE Schlüsselwort haben. Sie können auch einen Ausdruck nach dem Schlüsselwort CASE einfügen. Stellen Sie sich vor, dass Sie neben dem Gewicht der Tiere in Kilogramm auch das Gesamtgewicht der Säugetiere nach Arten anzeigen möchten - aber nur, wenn diese Werte speziell sind. In diesem Fall müssen drei Kennziffern ermittelt werden. Sie werden als Zeichenketten angezeigt. Ist das Gesamtgewicht nicht eine dieser drei Zahlen, dann werden andere angezeigt. Hier ist die Abfrage: SELECT name, weight, number_of_animal, ( CASE number_of_animal*weight WHEN 18 THEN 'small' WHEN 360 THEN 'middle' WHEN 24000 THEN 'big' ELSE 'other' END ) as total_weight FROM animal ; Sehen Sie sich das Ergebnis an: name weight number_of_animal total_weight Tiger 120 3 middle African elephant 4 800 5 big Lion 175 1 other Koala 9 2 small Giraffe 800 5 other Gaur NULL 2 other Okapi 225 5 other Dieser CASE Ausdruck hat eine ELSE Klausel, die andere anzeigt. Ohne die ELSE würde für alle nicht übereinstimmenden Gewichte NULL angezeigt. Hier ist derselbe Code ohne ELSE: SELECT name, weight, number_of_animal, CASE number_of_animal*weight WHEN 18 THEN 'small' WHEN 360 THEN 'middle' WHEN 24000 THEN 'big' END as total_weight FROM animal ; Und die Ergebnisse: name weight number_of_animal total_weight Tiger 120 3 middle African elephant 4 800 5 big Lion 175 1 NULL Koala 9 2 small Giraffe 800 5 NULL Gaur NULL 2 NULL Okapi 225 5 NULL Verwendung von Aliasen in CASE-Anweisungen Der Ausdruck CASE kann einen Alias oder einen Namen für die resultierende neue Spalte haben. Die obige Abfrage sieht jetzt mit einem Alias wie folgt aus: SELECT name, zoo, CASE zoo WHEN 1 THEN 'Brookfield Zoo' WHEN 2 THEN 'Dublin zoo' ELSE 'unknown' END as name_zoo FROM animal ; Und das Ergebnis: name zoo name_zoo Tiger 1 Brookfield Zoo African elephant 1 Brookfield Zoo Lion 1 Brookfield Zoo Koala NULL unknown Giraffe 2 Dublin zoo Gaur 1 Brookfield Zoo Okapi 0 unknown Verwendung von CASE mit anderen Datentypen Sie können den Ausdruck CASE auch mit anderen Datentypen verwenden, z. B. mit CHARACTER. Sehen Sie sich diese Abfrage an: SELECT name, zoo, ( CASE country WHEN 'Russia' THEN 'Europe' WHEN 'Congo' THEN 'Africa' WHEN 'Turkey' THEN 'Asia' WHEN 'Australia' THEN 'Australia' WHEN 'China' THEN 'Asia' ELSE 'unknown' END ) as continent FROM animal ; Diese Abfrage wählt Daten aus der Tabelle aus und zeigt den Kontinent an, aus dem das Tier stammt. Der Kontinent basiert auf der Spalte country, die den Datentyp CHARACTER verwendet. Dies ist das Ergebnis: name zoo continent Tiger 1 Europe African elephant 1 Africa Lion 1 Asia Koala NULL Australia Giraffe 2 unknown Gaur 1 Asia Okapi 0 unknown Der gesuchte CASE-Ausdruck Der gesuchte CASE Ausdruck ist das am häufigsten verwendete Format. Aber anstatt eine Spalte oder einen Ausdruck mit einer definierten Menge von Werten zu vergleichen, kann ein gesuchter Ausdruck mehrere WHEN Bedingungen vergleichen und ein Ergebnis ermitteln. Dies macht einen gesuchten CASE zur besseren Wahl für kompliziertere Logik. Hier ist die Syntax: CASE WHEN conditions THEN when_result ... ELSE else_result END Auch hier beginnt der Ausdruck mit dem Schlüsselwort CASE, aber es folgt kein Spaltenname oder Ausdruck. Es kann mehrere WHEN - THEN Konstruktionen geben, genau wie bei der einfachen CASE. Aber nach dem Schlüsselwort WHEN geben wir eine oder mehrere Bedingungen ein, anstatt Werte festzulegen. Diese Bedingungen vergleichen einen abgerufenen Wert und geben die erste Bedingung, die er erfüllt, als TRUE zurück. Daraufhin wird das Ergebnis von THEN angezeigt. Wenn alle Bedingungen FALSE ergeben, wird das Ergebnis von ELSE angezeigt. Und auch hier gilt: ELSE ist optional. Dies mag schwer zu verstehen sein, also lassen Sie uns unsere Beispielabfrage genauer betrachten: SELECT name, weight, CASE WHEN weight>1000 THEN 'big' WHEN weight BETWEEN 100 AND 1000 THEN 'middle' WHEN weight<100 THEN 'small' ELSE '---' END as description_weight FROM animal ; Sehen Sie sich die Ergebnisse an: name weight description_weight Tiger 120 middle African elephant 4 800 big Lion 175 middle Koala 9 small Giraffe 800 middle Gaur NULL — Okapi 225 middle Die erste WHEN-Klausel prüft, ob weight größer als 1.000 Kilogramm ist. Wenn dies der Fall ist, wird die Zeichenfolge big zurückgegeben. Die nächste Bedingung WHEN prüft, ob weight zwischen 100 und 1.000 Kilogramm liegt. Ist dies der Fall, wird die Zeichenfolge middle zurückgegeben. In diesem Fall wird der BETWEEN AND Operator verwendet, um den Bereich zu definieren. Für Tiere, deren weight weniger als 100 Kilogramm wiegt, wird die Zeichenfolge small angezeigt. In allen anderen Fällen ist der Rückgabewert "- ". Verwendung von CASE mit LIKE Sie können andere Operatoren mit dem Ausdruck CASE verwenden. Im folgenden Beispiel wird der Operator LIKE verwendet, der mit Mustern in Suchteilzeichenketten übereinstimmt. (Weitere Informationen über den Operator LIKE finden Sie unter Verwendung von LIKE zum Abgleichen von Mustern in SQL). Hier ist das Beispiel: SELECT name, ( CASE WHEN name LIKE '____' THEN '4 letters' WHEN name LIKE '_____' THEN '5 letters' ELSE 'other' END ) as description FROM animal ; Und hier ist das Ergebnis: name description Tiger 5 letters African elephant other Lion 4 letters Koala 5 letters Giraffe other Gaur 4 letters Okapi 5 letters In diesem gesuchten Ausdruck CASE prüft der Operator LIKE, ob der Name des Tieres aus vier oder fünf Buchstaben besteht. In anderen Fällen - wie bei dem afrikanischen Elefanten - ist der Rückgabewert anders. Verwendung von CASE mit IN Im nächsten Beispiel werden wir den Operator IN ausprobieren. Erinnern Sie sich an den einfachen Ausdruck CASE, der den Namen eines Kontinents auf der Grundlage des mit einem Tier verbundenen Landes zurückgab? Der Code für diese Abfrage war lang, dank der vielen separaten WHEN - THEN Konstruktionen. Im Folgenden werfen wir noch einmal einen Blick auf den alten Code: SELECT name, country, ( CASE country WHEN 'Russia' THEN 'Europe' WHEN 'Congo' THEN 'Africa' WHEN 'Turkey' THEN 'Asia' WHEN 'Australia' THEN 'Australia' WHEN 'China' THEN 'Asia' ELSE 'unknown' END ) as continent FROM animal ; Mit dem Operator IN können Sie die Menge des Codes reduzieren. Sehen Sie sich eine Suche nach CASE mit dem IN Operator an: SELECT name, country, ( CASE WHEN country IN ('Russia') THEN 'Europe' WHEN country IN ('Congo') THEN 'Africa' WHEN country IN ('Turkey','China') THEN 'Asia' WHEN country IN ('Australia') THEN 'Australia' ELSE 'unknown' END ) as continent FROM animal ; Wir können den Operator IN verwenden, um mehrere Länder desselben Kontinents aufzulisten. Wenn der Wert aus der Spalte country mit einer der Zeichenketten in IN übereinstimmt, ist das Ergebnis der Kontinent aus der Klausel THEN. Wenn der Ländername in keinem der IN -Operatoren aufgeführt ist, greift natürlich ELSE ein und gibt einen unknown -Wert zurück. Sehen Sie sich die Ergebnistabelle unten an: name country continent Tiger Russia Europe African elephant Congo Africa Lion Turkey Asia Koala Australia Australia Giraffe unknown Gaur China Asia Okapi NULL unknown Anordnen von Bedingungen in CASE Jetzt können Sie also Bedingungen in die WHEN Klausel einbauen. Es ist jedoch wichtig, sie genau zu formulieren. Wenn Ihr Testwert mit der ersten WHEN-Klausel übereinstimmt, wird die THEN -Klausel zurückgegeben und der CASE-Ausdruck ist beendet. Auch wenn ein Wert tatsächlich mehrere WHEN Bedingungen erfüllt, wird nur die erste Bedingung zurückgegeben. Sehen Sie sich das folgende Beispiel an: SELECT name, weight, ( CASE WHEN weight<1000 THEN 'not big' WHEN weight<100 THEN 'not middle' WHEN weight<10 THEN 'very small' ELSE '---' END ) as description_weight FROM animal ; In diesem Fall ist der Wert weight der erste, der die erste Bedingung WHEN erfüllt. In unserer Tabelle werden die meisten Tiere einen weight Wert von weniger als 1.000 kg haben. Nur bei Tieren mit einem zugehörigen weight von 1.000 oder mehr (oder mit einem NULL-Wert in weight) wird ein "-"-Wert zurückgegeben. Hier sind die Ergebnisse: name weight description_weight Tiger 120 not big African elephant 4 800 — Lion 175 not big Koala 9 not big Giraffe 800 not big Gaur NULL — Okapi 225 not big Denken Sie daran, dass die Reihenfolge der WHEN-Bedingungen sehr wichtig ist; sie können die Ergebnisse beeinflussen, die Sie zurückerhalten. Mehr über den SQL CASE-Ausdruck lernen Die Fähigkeit, einen richtig formatierten CASE Ausdruck zu verwenden, ist eine gute Fähigkeit, die es zu pflegen gilt. So können Sie die Ergebnisse erzielen, die Sie von Ihren Abfragen erwarten. Wenn Sie mehr über den Ausdruck CASE erfahren möchten, besuchen Sie den LearnSQL Standard-SQL-Funktionen Kurs. Er zeigt Ihnen, wie Sie Abfragen erstellen können, die diesen und viele andere Ausdrücke verwenden. Sie erhalten auch die Möglichkeit, Ihre Fähigkeiten zu üben. Probieren Sie es noch heute aus! Tags: CASE WHEN