Geschrieben von

SQL: WHERE

WebDev

Mit dem SQL-SELECT-Statement kann man Spalten einer Tabelle abfragen. Mit der WHERE-Klausel lassen sich die ausgelieferten Ergebnisse filtern.

WHERE-Syntax

Um ein Ergebnis zu filtern, sieht die Syntax wie folgt aus:

SELECT spalten_name
FROM tabellen_name
WHERE spalten_name = 'Max';

Hier werden nur Zeilen einer Spalte abgefragt, die “Max” als String in der Spalte “spalten_name” besitzen.

Vergleichsoperatoren

Entscheidend bei der WHERE-Abfrage sind die Vergleichsoperatoren. Folgende stehen zur Verfügung:

VergleichsoperatorFunktion
Wert1 = Wert2Hier wird geprüft, ob beide Werte gleich sind.
Wert1 <> Wert2 oder Wert1 != Wert2Hier wird geprüft, ob die beiden Werte ungleich sind.
Wert1 < Wert2Hier wird geprüft, ob der linke Wert kleiner ist als der rechte Wert.
Wert1 <= Wert2Hier wird geprüft, ob der linke Wert kleiner oder gleich dem rechten Wert ist.
Wert1 > Wert2Hier wird geprüft, ob der linke Wert größer ist als der rechte Wert.
Wert1 >= Wert2Hier wird geprüft, ob der linke Wert größer oder gleich dem rechten Wert ist.
Wert BETWEEN Wert1 AND Wert2Hier wird geprüft, ob sich ein Wert zwischen 2 Werten befindet.
Wert NOT BETWEEN Wert1 AND Wert2Hier wird geprüft, ob sich ein Wert nicht zwischen 2 Werten befindet.
Wert LIKE MusterHier wird geprüft, ob ein Wert mit einem Textmuster übereinstimmt.
Wert NOT LIKE MusterHier wird geprüft, ob ein Wert nicht mit einem Textmuster übereinstimmt.
Wert IN (Wert1, Wert2, …)Hier wird geprüft, ob der Wert in der Liste der Klammern vorkommt.
Wert NOT IN (Wert1, Wert2, …)Hier wird geprüft, ob der Wert nicht in der Liste der Klammern vorkommt.
Wert IS NULLHier wird geprüft, ob ein Wert nicht definiert ist.
Wert IS NOT NULLHier wird geprüft, ob ein Wert definiert ist.

Möchte man also einen bestimmten Werte-Bereich ausgeben, würde der BETWEEN-Befehl wie folgt aussehen:

SELECT spalten_name
FROM tabellen_name
WHERE spalten_name BETWEEN 1 AND 10;

WHERE NOT

SQL bietet auch die Möglichkeit, Bedingungen in der WHERE-Klausel zu verneinen. Dazu schreibt man nach der WHERE-Klausel einfach ein NOT:

SELECT spalten_name
FROM tabellen_name
WHERE NOT name="max";

AND und OR

Die WHERE-Klausel lässt sich auch mit AND und OR erweitern, um weitere Abfragebedingungen hinzuzufügen. Hier ein AND-Beispiel:

SELECT title
FROM cds
WHERE release_year > 1998
AND release_year < 2000;

Hier wird die Spalte "title" aus der Tabelle "cds" gewählt - und zwar nur Titel, die zwischen 1998 und 2000 veröffentlicht wurden. Eine OR-Abfrage sieht ähnlich aus:

SELECT title
FROM cds
WHERE release_year = 1998
OR release_year = 2000;

Hier werden Titel gewählt, die entweder im Jahr 1998 oder 2000 veröffentlicht worden sind. Außerdem lassen sich beide Bedingungen verknüpfen:

SELECT title
FROM cds
WHERE (release_year = 1994 OR release_year = 2000)
AND (label= 'abc' OR label = 'xyz');

LIKE

Um Text nach einem Muster zu suchen oder filtern gibt es den Vergleichsoperator LIKE. Dieser prüft, ob das Muster in den Spaltenwerten übereinstimmt. Dabei kommen 2 Platzhalter zum Einsatz:

  • Wildcard "%": Damit wird eine beliebige Anzahl von beliebigen Zeichen geprüft.
  • Underscore "_": Der Underscore steht bei der Musterprüfung für exakt ein beliebiges Zeichen.

Hier ein paar Beispiele:

SELECT *
FROM table
WHERE name LIKE '%ax%';

Dieses Muster würde "Max", "Maximilian" oder "yxcxcaxyxcyxc" erkennen. Hier ein Underscore-Beispiel:

SELECT *
FROM table
WHERE name LIKE '_ax';

Hier würden "Max" und "Dax" zutreffen.

Last modified: 18. Mai 2021