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:
Vergleichsoperator | Funktion |
---|---|
Wert1 = Wert2 | Hier wird geprüft, ob beide Werte gleich sind. |
Wert1 <> Wert2 oder Wert1 != Wert2 | Hier wird geprüft, ob die beiden Werte ungleich sind. |
Wert1 < Wert2 | Hier wird geprüft, ob der linke Wert kleiner ist als der rechte Wert. |
Wert1 <= Wert2 | Hier wird geprüft, ob der linke Wert kleiner oder gleich dem rechten Wert ist. |
Wert1 > Wert2 | Hier wird geprüft, ob der linke Wert größer ist als der rechte Wert. |
Wert1 >= Wert2 | Hier wird geprüft, ob der linke Wert größer oder gleich dem rechten Wert ist. |
Wert BETWEEN Wert1 AND Wert2 | Hier wird geprüft, ob sich ein Wert zwischen 2 Werten befindet. |
Wert NOT BETWEEN Wert1 AND Wert2 | Hier wird geprüft, ob sich ein Wert nicht zwischen 2 Werten befindet. |
Wert LIKE Muster | Hier wird geprüft, ob ein Wert mit einem Textmuster übereinstimmt. |
Wert NOT LIKE Muster | Hier 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 NULL | Hier wird geprüft, ob ein Wert nicht definiert ist. |
Wert IS NOT NULL | Hier 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.