Wenn wir nicht alle Daten aus einer Tabelle benötigen, können wir die Menge der Datensätze über logische Bedingungen, sogenannte Prädikate einschränken. Die Syntax dafür ist sehr einfach:
SELECT <Feldliste> FROM <Tabelle> WHERE <Prädikat>
Die Ergebnisse der Prädikate können mit den logischen Operatoren AND, NOT und OR kombiniert werden. In einer Abfrage mit WHERE Klausel werden nur die Datensätze ausgegeben, für die die WHERE Bedingung den logischen Wert TRUE annimmt.
Wir sprechen im Folgenden immer über die logischen Werte TRUE und FALSE. Hierbei bedeutet TRUE, dass ein Prädikat für eine Zeile zu einem logisch wahren Wert ausgewertet wird. Das Gegenteil von TRUE ist FALSE.
Vergleichsprädikate
Am häufigsten werden Vergleichsprädikate in der WHERE-Klausel verwendet. Das heist, zwei Dinge werden mit einem Vergleichsoperator verglichen. Meistens eine Spalte mit einem festen Wert. Typisches Beispiel wäre:
WHERE name = 'Brandeis'
oder
WHERE id < 20
Tatsächlich kann man aber auch noch viel mehr vergleichen. Beispielsweise zwei Spalten oder berechnete Werte. Das sind aber Themen für die fortgeschrittenen Kurse.
Bei den Operatoren < und > wird in der Logik des jeweiligen Datentyps verglichen. Wenn beispielsweise Ganzzahlen (Datentyp INTEGER) verglichen werden, dann kommt 2 vor 10. Wenn allerdings Zeichenketten (Datentyp NVARCHAR oder VARCHAR) verglichen werden, dann kommt ‘2’ hinter ’10’, weil hier von links nach Rechts die einzelnen Zeichen verglichen werden.
Operator | Beschreibung |
---|---|
= | Ist exakt gleich |
< | Ist kleiner als |
> | Ist größer als |
<> oder != | Ist ungleich wie |
<= | Ist kleiner oder gleich |
>= | Ist größer oder gleich |
Suche nach Mustern mit dem LIKE Prädikat
Mit dem LIKE-Operator können Vergleiche mit Mustern gemacht werden. Diese Muster können Platzhalter enthalten. Dabei steht das Prozent-Zeichen % für ein oder mehrere beliebige Zeichen und der Unterstrich _ für exakt ein beliebiges Zeichen.
In dem Beispiel sehen wir eine Abfrage, die alle Vornamen (Spalte FIRSTNAME) aus der Benutzer Tabelle USERS findet, die mit A beginnen.
SELECT firstname FROM users WHERE firstname LIKE 'A%'
Mengenvergleiche mit dem IN-Prädikat
Wenn ein Spalte mit mehreren Werten verglichen werden soll, so kann man das mit dem IN-Prädikat erreichen. Beispielsweise können wir alle Aufgaben im Status 1, 2 oder 3 mit der folgenden Abfrage bekommen:
SELECT id, title, status FROM tasks WHERE status IN (1, 2, 3)
Logische Verknüpfung der Prädikate mit AND, OR und NOT
Negieren mit NOT
Durch das voranstellen des logischen Operators NOT kann ein beliebiges Prädikat negiert werden. Man kann das NOT aber auch vor das entsprechende Schlüsselwort setzen, was sich häufig besser lesen lässt.
Kombinieren mit AND und OR
Mit den beiden logischen Operatoren AND und OR können zwei oder mehr Prädikate verknüpft werden.
Das Ergebnis von AND Verknüpfungen hat immer dann den logischen Wert TRUE, wenn alle beteiligten Prädikate zum Wert TRUE ausgewertet werden.
Das Ergebnis von OR Verknüpfungen ist TRUE, wenn mindestens einer der beteiligten Prädikate zum Wert TRUE ausgewertet wird.
Falls sowohl AND als auch OR in einer Bedingung verwendet werden, sollte immer eine Klammer gesetzt werden, um die Reihenfolge der Auswertung transparent zu machen.
Negierung mit vorangestelltem NOT | Alternative Schreibweise |
---|---|
WHERE NOT id > 10 | |
WHERE NOT status IN (1, 2, 3) | WHERE status NOT IN (1, 2, 3) |
WHERE NOT name LIKE 'A%' | WHERE name NOT LIKE 'A%' |
Ausblick
Diese Lektion gibt nur die wichtigsten Prädikate und davon auch nur die einfachen Versionen. Mit fortgeschrittenen Techniken sind noch viel mehr Dinge möglich. Hier eine Liste mit weiteren Punkte, die zum Filtern gehören:
- Filtern durch den INNER JOIN – Das wird in der entsprechenden Lektion gezeigt
- Filtern auf NULL-Werte mit dem IS NULL Prädikat – Das wird später in der Lektion über NULL gezeigt
- Das EXISTS Prädikat mit Unterabfragen
- Suche nach komplexen Mustern mit regulären Ausdrücken
- Unterabfragen im IN-Prädikat
- Filtern auf aggregierte Daten mit der HAVING Klausel
- Filtern vor dem JOIN mit Prädikaten in der ON-Klausel
- Der logische Wert UNKNOWN wird in Zusammenhang mit dem NULL-Wert behandelt.