Bedingung (WHERE)
Nicht immer werden alle Informationen benötigt, die in einer Tabelle hinterlegt sind.
Mit der "WHERE
"-Klausel übermitteln wir ein Kriterium, welches von den Informationen erfüllt werden müssen, um ausgewählt zu werden.
Vergleichsoperatoren
In SQL können wir viele verschiedene Vergleiche durchführen:
- Numerische Werte
- Texte
- Textmuster
- Datumsangaben
- Auf Intervalle prüfen
- Auf Existenz in Teilmenge prüfen
- Auf Wert ist definiert prüfen
Wir haben in SQL verschiedene Operatoren, mit denen wir die Werte in der Datenbank vergleichen können.
Operator | Beispiel | Beschreibung |
---|---|---|
= | Ingo = Ingo // true | Prüft die Gleichheit zweier Werte. |
<> oder != | Ingo != Ingo // false | Prüft die Ungleichheit zweier Werte. |
< | 4 < 8 // true | Prüft ob Wert kleiner ist. |
<= | 4 <= 4 // true | Prüft ob Wert kleiner oder gleich ist. |
> | 4 > 2 // true | Prüft ob Wert größer ist. |
>= | 4 >= 2 // true | Prüft ob Wert größer oder gleich ist. |
BETWEEN AND | 12 BETWEEN 10 AND 20 // true | Prüft ob Wert innerhalb eines bestimmten Bereichs ist. |
NOT BETWEEN AND | 120 NOT BETWEEN 10 AND 20 // true | Prüft ob Wert ausserhalb eines bestimmten Bereichs ist. |
LIKE | vorname LIKE a | Prüft ob Wert mit einem Textmuster übereinstimmt. |
NOT LIKE | vorname NOT LIKE a | Prüft ob Wert nicht mit einem Textmuster übereinstimmt. |
IN | familienstand IN ('Ledig', 'Geschieden') | Prüft ob ein Wert in einer geklammerten Liste vorkommt. |
NOT IN | familienstand NOT IN ('Ledig', 'Geschieden') | Prüft ob ein Wert nicht in einer geklammerten Liste vorkommt. |
IS NULL | Hochzeitstag IS NULL | Prüft ob ein Wert nicht definiert ist. |
IS NOT NULL | Hochzeitstag IS NOT NULL | Prüft ob ein Wert definiert ist. |
Prüfen auf Gleichheit
Wir stellen eine Anfrage an die Datenbank, bei der wir die Anrede und die Namen aller Frauen zurückgeliefert bekommen, die in der Tabelle "person" hinterlegt sind. Der Befehl heißt: WÄHLE "anrede", "vorname" und "nachname" VON der Tabelle "person" BEI DENEN die "anrede" den gleichen Wert hat wie die Zeichenkette "Frau".
SELECT anrede, vorname, nachname FROM person WHERE anrede='Frau';
Die "WHERE
"-Klausel wird erst am Ende der Anfrage definiert und bekommt eine Zeichenkette übergeben.
Die Zeichenkette steht in einfachen Anführungszeichen und kann Zahlen, Buchstabenfolgen oder Sonderzeichen enthalten.
Prüfen auf Ungleichheit
Wir stellen eine Anfrage an die Datenbank, bei der wir die Anrede, die Namen und den Familienstand aller Personen zurückgeliefert bekommen, die nicht verheiratet sind. Der Befehl heißt: WÄHLE "anrede", "vorname", "nachname" und "familienstand" VON der Tabelle "person" BEI DENEN der "familienstand" nicht den Wert der Zeichenkette "Verheiratet" hat.
SELECT anrede, vorname, nachname, familienstand FROM person WHERE familienstand!='Verheiratet';
Prüfen auf größer als
Immer wieder wird es zu Abfragen kommen, die einen bestimmten Wert überschreiten oder unterschreiten müssen.
Dazu verwenden wir neben der "WHERE
"-Klausel die: kleiner als (<), kleiner als oder gleich (<=), größer als (>) sowie größer als oder gleich (>=) –Operatoren.
Im Beispiel wollen wir anhand der Postleitzahlen von der Tabelle "adresse" herausfinden, ob eine Adresse eher südlich oder doch eher nördlich auf der Deutschlandkarte liegt.
SELECT strasse, hausnummer, plz, ort FROM adresse WHERE plz >'49999';
Wir prüfen, welche Postleitzahlen größer sind als 49999, nun werden alle Postleitzahlen ausgegeben, die Mindesten mit 50000 beginnen. Eine Anfrage mit gleichem Ergebnis wäre, wenn wir die Postleitzahl auf größer oder gleich (>=) 50000 geprüft hätten.
Mit den Operatoren kleiner als (<) sowie kleiner als oder gleich (<) hätten wir die Abfrage auch schreiben können.
Prüfen auf bestimmten Bereich
Wenn nur Postleitzahlen aus einem bestimmten Bereich benötigt werden, können wir die Anfrage spezifizieren und mit dem Operator "BETWEEN AND
" filtern.
SELECT plz, ort FROM adresse WHERE plz BETWEEN 70000 AND 99999;
Die Datenbank gibt uns nur die Informationen aus, bei denen die Postleitzahlen zwischen 70000 und 99999 liegt.
Mit dem "NOT BETWEEN AND
" Operator können wir uns genau die gegenteiligen Informationen ausgeben lassen.
Also alle Einträge, die nicht in diesem Bereich liegen.
Auf bestimmtes Muster prüfen
Der "LIKE
"-Operator prüft die Informationen in den Spalten auf ein bestimmtes Muster.
Dabei können wir mit dem %-Zeichen eine beliebige Anzahl von beliebigen Zeichen simulieren.
Das %-Zeichen ist sozusagen ein Platzhalter und wird bei SQL-Abfragen auch als "Wildcard" oder "Joker" bezeichnet.
In der folgenden Abfrage wollen wir uns nur Straßennamen ausgeben lassen, die auf die Zeichenkette "platz" enden. Dazu verwenden wir den Platzhalter (%) und hängen dann den gesuchten Begriff an.
SELECT strasse, ort FROM adresse WHERE strasse LIKE '%platz';
Mit dem "NOT LIKE
"-Operator können wir uns die genau gegenteiligen Straßen anzeigen lassen.
Also alle, die nicht auf die Zeichenkette "platz" enden.
Auf bestimmtes Vorkommen prüfen
Mit dem "IN
"-Operator können wir auch bestimmte Muster prüfen, diesmal sogar mit etwas mehr Auswahl.
In einer kommaseparierten Liste, die in runden Klammern steht, werden die Werte eingetragen, auf die die Anfrage passen soll.
SELECT vorname, nachname FROM person WHERE vorname IN ('Michael', 'Sabine');
Die Tabelle "person" gibt uns nun die Zeilen aus, bei denen die Vornamen: Michael, Sabine oder irgendwelche anderen in der Liste aufgeführte Namen sind.
Mit dem "NOT IN
" Operator können wir demnach alle Zeilen ausgeben lassen, bei denen die Vornamen nicht in der Liste vorkommen.
Prüfen ob ein Wert definiert wurde
Mit dem "IS NULL
"-Operator können wir prüfen, ob ein Wert überhaupt definiert wurde.
Bei Leuten, die noch nicht geheiratet haben, können wir bei einer Abfrage nach dem Hochzeitsdatum nichts erwarten.
Der Datentyp "NULL" steht sozusagen für Informationen, die nicht definiert sind.
SELECT vorname, nachname FROM person WHERE hochzeitsdatum IS NULL;
Die "IS NULL
"-Operation liefert die Zeilen aus, bei denen der Wert der Spalte "hochzeitsdatum", "NULL" ist.
Die umgekehrte Operation "IS NOT NULL
" liefert demnach alle definierten Werte aus.
Weiter mit Logische Verknüpfungen (AND und OR)