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.
- Bis zu 1 Gbit/s Bandbreite & unbegrenzt Traffic
- Schneller NVMe-SSD-Speicher
- Kostenlose Plesk Web Host Edition
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;
sqlDabei 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;
sqlBeispiel 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;
sqlDie 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);
sqlDie 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 |
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!