SQL CASE: Bedingungen aufstellen und abfragen

SQL CASE erlaubt es Ihnen, eine Datenbank zu manipulieren, indem Sie bestimmte Bedingungen abfragen und Resultate anzeigen lassen. Der Ansatz der Bedingung CASE ähnelt dabei der Anweisung If-then-else.

Was ist SQL CASE?

In vielen Datenbank- und Programmiersprachen ist die Anweisung If-then-else verbreitet. Diese führt eine Aktion so lange durch, wie eine bestimmte Voraussetzung erfüllt ist. Trifft dies nicht länger zu, verlässt das entsprechende Programm die Schleife oder führt eine andere Aktion aus. Die Structured Query Language setzt auf ein ähnliches Prinzip und stellt die Anweisung SQL CASE zur Verfügung. Diese durchläuft eine Liste von Bedingungen und antwortet mit einem bestimmten Wert, sofern eine Bedingung erfüllt wird. Wird keine Bedingung erfüllt, antwortet sie mit einem Wert, der unter ELSE definiert ist. Gibt es keine ELSE-Einschränkung und keine Erfüllung der Bedingungen, wird NULL ausgegeben.

vServer (VPS) von IONOS

Günstige und starke VPS für Webserver, Mailserver und eigene Anwendungen mit persönlichem Berater und 24/7 Support!

100 % SSD-Speicher
Bereit in 55 Sek.
SSL Zertifikat

Syntax und Funktionsweise

Die grundsätzliche Syntax von SQL CASE sieht aus wie folgt:

SELECT spalte1, spalte2, …,
CASE
	WHEN bedingung1 THEN resultat1
END AS name
FROM name_der_tabelle;
sql

Dabei geben Sie mit dem den SQL-Befehl SELECT an, welche Spalten berücksichtigt werden sollen. Mit CASE überprüfen Sie die Bedingung. Trifft diese zu (ist sie also true), wird der Wert des hinterlegten Resultats ausgespielt. END AS beendet die Schleife. FROM gibt an, in welcher Tabelle diese Schleife durchgeführt werden soll.

Mit der optionalen Einschränkung ELSE sieht die Syntax folgendermaßen aus:

SELECT spalte1, spalte2, …,
CASE
	WHEN bedingung1 THEN resultat1
	ELSE anderes_resultat
END AS name
FROM name_der_tabelle;
sql

Beispiel für die Bedingung

Um die Funktionsweise von SQL CASE zu veranschaulichen, erstellen wir eine einfache Tabelle namens „Kundenliste“. Hier hinterlegen wir eine Kundennummer, den Namen des Kunden bzw. der Kundin, ihren oder seinen Standort, das Bestelldatum, die Anzahl der bestellten Artikel und den bezahlten Betrag in Euro.

Kundennummer Name Standort Datum Artikel Gesamtbetrag
1427 Schmidt Berlin 1/13/2024 14 634
1377 Schulz Hamburg 1/19/2024 9 220
1212 Peters Hamburg 1/3/2024 15 400
1431 Müller München 1/19/2024 22 912
1118 Becker Passau 2/1/2024 10 312

Nun nutzen wir die Bedingung, um die Liste durchzuarbeiten. Für Gesamtbeträge über 400 Euro soll ein bestimmter Text ausgegeben werden. Dies gilt ebenso für Beträge unter 400 Euro. Die Einschränkung ELSE nutzen wir für Bestellungen, die genau bei 400 Euro liegen. Sie sehen dabei bereits, dass auch mehrere Bedingungen hintereinander abgefragt werden können. Die passende Syntax für unser Beispiel ist diese:

SELECT Kundennummer, Name, Standort, Datum, Artikel, Gesamtbetrag
CASE
	WHEN Gesamtbetrag > 400 THEN 'Der Einkaufswert liegt über 400 Euro'
	WHEN Gesamtbetrag < 400 THEN ''Der Einkaufswert liegt unter 400 Euro'
	ELSE 'Der Einkaufswert beträgt genau 400 Euro'
END AS Bestelldetails
FROM Kundenliste;
sql

Die entsprechende Ausgabe sieht so aus:

Kundennummer Name Standort Datum Artikel Gesamtbetrag Bestelldetails
1427 Schmidt Berlin 1/13/2024 14 634 Der Einkaufswert liegt über 400 Euro
1377 Schulz Hamburg 1/19/2024 9 220 Der Einkaufswert liegt unter 400 Euro
1212 Peters Hamburg 1/3/2024 15 400 Der Einkaufswert beträgt genau 400 Euro
1431 Müller München 1/19/2024 22 912 Der Einkaufswert liegt über 400 Euro
1118 Becker Passau 2/1/2024 10 312 Der Einkaufswert liegt unter 400 Euro

Kombination mit anderen Anweisungen

Sie können die Bedingungen auch innerhalb anderer Anweisungen abfragen. Im Folgenden ordnen wir die Einträge nach Kundennummer an. Wenn diese nicht angegeben (also NULL) ist, soll stattdessen der Kundenname berücksichtigt werden. Dies ist der entsprechende Code:

SELECT Kundennummer, Name, Standort, Datum, Artikel, Gesamtbetrag
FROM Kundenliste
ORDER BY
(CASE
		WHEN Kundennummer IS NULL THEN Name
		ELSE Kundennummer
END);
sql

Die Ausgabe ist dann diese:

Kundennummer Name Standort Datum Artikel Gesamtbetrag
1118 Becker Passau 2/1/2024 10 312
1212 Peters Hamburg 1/3/2024 15 400
1377 Schulz Hamburg 1/19/2024 9 220
1427 Schmidt Berlin 1/13/2024 14 634
1431 Müller München 1/19/2024 22 912
Tipp

Mit SQL-Server-Hosting von IONOS haben Sie die Wahl zwischen MSSQL, MySQL oder MariaDB. Profitieren Sie von einer außergewöhnlichen Performance, einer starken Sicherheitsarchitektur und persönlicher Beratung!