Zurück zur Artikelliste Artikel
9 Leseminuten

Der vollständige Leitfaden zur SQL WHERE-Klausel

Lernen Sie, wie Sie die SQL WHERE-Klausel zum Filtern von Zeilen verwenden können. In diesem umfassenden Artikel behandeln wir Vergleichsoperatoren und die Operatoren BETWEEN, IN, LIKE, AND, OR und NOT.

Das Filtern von Ausgabezeilen ist eines der ersten Dinge, die Sie lernen müssen, wenn Sie mit SQL beginnen. In diesem Leitfaden erfahren Sie, wie Sie die SQL WHERE-Klausel zum Filtern von Zeilen in verschiedenen Szenarien verwenden können. Wir werden grundlegende und einige fortgeschrittene Anwendungsfälle behandeln.

Die WHERE-Klausel in SQL

Stellen wir uns vor, Sie arbeiten an einem Ihrer ersten SQL-Projekte und führen Ihre ersten SQL-Abfragen aus. Sie kennen bereits die grundlegende Syntax der Anweisung SELECT und wissen, wie Sie Spalten aus einer oder zwei Tabellen in Ihrer Datenbank abrufen können. Aber dann haben Sie festgestellt, dass Sie oft nicht alle Datensätze aus einer Tabelle benötigen. Sie möchten lernen, wie Sie Ihre Ausgabe filtern können, so dass Sie nur einige Datensätze zurückgeben können, die bestimmte Kriterien erfüllen.

Wollen Sie nur die Datensätze, die einem bestimmten Kunden entsprechen? Oder müssen Sie die Liste der Produkte abrufen, die nur noch wenig auf Lager sind (z. B. weniger als 10 Artikel)? Oder möchten Sie eine Liste der Handelsvertreter erhalten, die in der Filiale X arbeiten und im letzten Monat einen überdurchschnittlichen Umsatz erzielt haben?

In all diesen Fällen benötigen Sie die SQL-Klausel WHERE, um Ihre Ergebnisse zu filtern. Diese Klausel führt bestimmte Bedingungen ein, wie zum Beispiel:

  • quantity < 100
  • price BETWEEN 100 AND 500
  • customer_name = ‘John Smith’.

Damit die Filterbedingungen ordnungsgemäß ausgeführt werden können, sollte die WHERE -Klausel nach FROM und JOIN und vor GROUP BY, HAVING und ORDER BY platziert werden.

Hier ein Beispiel für eine SQL-Abfrage, um Informationen über die seit 2020 erschienenen Bücher zu erhalten, sortiert nach dem Namen des Autors:

SELECT b.title, a.name, b.year
FROM books b
JOIN authors a
ON books.author_id = authors.id
WHERE b.year >= 2020
ORDER BY a.name;

Beachten Sie, dass wir Informationen aus zwei Tabellen kombiniert haben (books und authors) kombiniert und die WHERE Klausel nach der ON Verknüpfungsbedingung und vor der ORDER BY Klausel platziert. Mehr über die korrekte Syntax der WHERE -Klausel erfahren Sie in diesem anfängerfreundlichen Leitfaden.

Es könnte auch eine gute Idee sein, gleich mit dem Üben von WHERE zu beginnen. In diesem Fall empfehle ich Ihnen unseren interaktiven SQL für Anfänger Kurs. In den 129 interaktiven Übungen werden die wichtigsten SQL-Konzepte behandelt, darunter einfache und komplexe WHERE Bedingungen.

Wenn Sie sich zunächst einen Überblick verschaffen möchten, lassen Sie uns fortfahren, indem wir uns die Operatoren ansehen, die Sie in der WHERE -Klausel verwenden können.

Operatoren zur Verwendung mit SQL WHERE

Dank einer Vielzahl von Operatoren, die für den Vergleich von Werten in SQL verwendet werden können, können Sie in WHERE sowohl sehr einfache als auch komplexe Filterbedingungen erstellen. Im Folgenden werden die wichtigsten Operatoren vorgestellt, die eine Filterung nach numerischen Werten, Zeichenketten, NULL-Werten und einer Liste von Werten ermöglichen.

Numerische Werte

Für numerische Werte können Sie diese Vergleichsoperatoren verwenden:

  • = Äquivalent zu.
  • != (oder <>) Nicht gleich.
  • < Kleiner als.
  • <= Kleiner als oder gleich.
  • > Größer als.
  • >= Größer als oder gleich.

Um zu sehen, wie diese Operatoren in der Praxis funktionieren, werden wir ein paar Beispiele machen. Für unsere Beispiele verwenden wir die folgende Tabelle, die Informationen über Vertriebsmitarbeiter enthält: ID, Vorname, Nachname, Jahresgehalt, Provisionssatz, die im Jahr 2021 erhaltene Provision und die ID der Niederlassung.

salespeople
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
11KatarinaRostova450000.1547345.601
12AlinaPark430000.1545678.902
13MeeraMalik500000.1539045.632
17SamarNavabi520000.1423023.452
18DonaldRessler400000.1441345.752
20ElisabethKeen590000.1445350.002
21TomKeen410000.1241560.751
22DembeZuma400000.1231540.705
23AramMojtabai500000.1229050.652
30KateKaplan540000.1025760.455
32MarvinGerard550000.1022500.005
34RaymondReddington600000.1017570.805
35HaroldCooper570000.1015450.502
37IanGarvey430000.08NULL1
38IvanStepanov410000.08NULL1

Zunächst möchten wir die Datensätze aller Verkäufer abrufen, deren Jahresgehalt mindestens 50.000 $ beträgt. Wir können die folgende Abfrage verwenden:

SELECT *
FROM salespeople
WHERE salary >= 50000;
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
13MeeraMalik500000.1539045.632
17SamarNavabi520000.1423023.452
20ElisabethKeen590000.1445350.002
23AramMojtabai500000.1229050.652
30KateKaplan540000.1025760.455
32MarvinGerard550000.1022500.005
34RaymondReddington600000.1017570.805
35HaroldCooper570000.1015450.502

Wie erwartet, erhalten wir die Liste der Verkäufer, deren Gehalt 50.000 $ oder mehr beträgt.

Als Nächstes sehen wir uns an, wie wir mit den Vergleichsoperatoren Float-Zahlen anstelle von ganzen Zahlen verwenden können. Wir werden alle Verkäufer auflisten, die aufgrund ihrer langen Erfahrung im Unternehmen einen Provisionssatz von über 0,12 haben:

SELECT *
FROM salespeople
WHERE commission_rate > 0.12;
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
11KatarinaRostova450000.1547345.601
12AlinaPark430000.1545678.902
13MeeraMalik500000.1539045.632
17SamarNavabi520000.1423023.452
18DonaldRessler400000.1441345.752
20ElisabethKeen590000.1445350.002

Da wir in der WHERE -Klausel den nicht-inklusiven > -Operator verwendet haben, haben wir nur die Verkäufer, deren Provisionssatz genau über 0,12 liegt. Dies schließt diejenigen aus, deren Satz gleich 0,12 ist.

Beachten Sie auch, dass wir Vergleichsoperatoren mit Literalen verwendet haben (d. h. 50000 und 0.12). Beim Filtern von Datensätzen können wir auch Vergleichsoperatoren mit Ausdrücken verwenden. Lassen Sie uns zum Beispiel die Verkäufer auflisten, deren Provisionseinnahmen im Jahr 2021 größer waren als ihr Jahresgehalt:

SELECT *
FROM salespeople
WHERE commission_2021 > salary;
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
11KatarinaRostova450000.1547345.601
12AlinaPark430000.1545678.902
18DonaldRessler400000.1441345.752
21TomKeen410000.1241560.751

Die Abfrage hat wie beabsichtigt funktioniert; wir sehen vier Verkäufer, die im Jahr 2021 offensichtlich sehr hohe Umsätze hatten, so dass ihre Provisionseinnahmen ihr Gehalt überstiegen.

An diesem Punkt sollten Sie sich mit den oben gezeigten Vergleichsoperatoren mehr oder weniger wohl fühlen. Nun ist es an der Zeit, einen weiteren Operator vorzustellen, den Sie mit numerischen Werten in WHERE verwenden können: den BETWEEN Operator.

Um alle Verkäufer aufzulisten, deren Provisionssatz zwischen 0,10 und 0,14 liegt, können Sie die folgende Abfrage verwenden:

SELECT *
FROM salespeople
WHERE commission_rate BETWEEN 0.10 AND 0.14;
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
17SamarNavabi520000.1423023.452
18DonaldRessler400000.1441345.752
20ElisabethKeen590000.1445350.002
21TomKeen410000.1241560.751
22DembeZuma400000.1231540.705
23AramMojtabai500000.1229050.652
30KateKaplan540000.1025760.455
32MarvinGerard550000.1022500.005
34RaymondReddington600000.1017570.805
35HaroldCooper570000.1015450.502

Beachten Sie, dass der Operator BETWEEN sowohl für die untere als auch für die obere Grenze gilt, so dass die Ergebnismenge Datensätze enthält, die den Provisionssätzen von 0,10 und 0,14 entsprechen.

Kommen wir nun zu den Operatoren, die Sie mit Textwerten verwenden können.

Text-Werte

Zunächst einmal können Sie bei Textwerten die folgenden Vergleichsoperatoren verwenden, die bei Zeichenketten ähnlich funktionieren wie bei numerischen Werten, aber bei Textwerten werden die Datensätze alphabetisch geordnet und verglichen

  • = Äquivalent zu.
  • != (oder <>) Nicht gleich.
  • < Kleiner als (steht in alphabetischer Reihenfolge an erster Stelle, d. h. a < b).
  • <= Kleiner als oder gleich.
  • > Größer als (steht in alphabetischer Reihenfolge an zweiter Stelle, d. h. b > a).
  • >= -Größer als oder gleich.

Um Informationen über alle Verkäufer abzurufen, deren Nachname (in alphabetischer Reihenfolge) vor "Keen" steht, würden wir die folgende Abfrage verwenden:

SELECT *
FROM salespeople
WHERE last_name < ‘Keen’;
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
30KateKaplan540000.1025760.455
32MarvinGerard550000.1022500.005
35HaroldCooper570000.1015450.502
37IanGarvey430000.08NULL1

Diese Vergleichsoperatoren funktionieren gut mit Textwerten. Beachten Sie jedoch, dass wir in den WHERE Bedingungen immer Anführungszeichen mit String-Literalen verwenden (z. B. "Keen"). Einige Datenbanken unterscheiden standardmäßig nicht zwischen Groß- und Kleinschreibung (z. B. SQL Server, MySQL), andere hingegen schon (z. B. Oracle) und würden keine Datensätze zurückgeben, wenn Sie nach "keen" statt nach "Keen" suchen.

Bei Zeichenketten brauchen wir oft viel mehr Flexibilität als bei Zahlen, und da kommt der Operator LIKE gerade recht. Er ermöglicht eine erweiterte Filterung von Textwerten, insbesondere in Kombination mit einem SQL-Platzhalter (z. B. "_" für ein fehlendes Zeichen oder "%" für eine beliebige Anzahl von Zeichen).

Wenn wir zum Beispiel alle Verkäufer auflisten möchten, deren Nachname mit K beginnt, können wir die folgende SQL-Abfrage schreiben:

SELECT *
FROM salespeople
WHERE last_name LIKE ‘K%’;
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
20ElisabethKeen590000.1445350.002
21TomKeen410000.1241560.751
30KateKaplan540000.1025760.455

Lesen Sie diesen Artikel, wenn Sie mehr darüber erfahren möchten, wie SQL-Jokerzeichen zum Filtern von Datensätzen mit Textwerten in SQL verwendet werden können.

Vergleiche mit NULL-Werten

Die Kombination von Vergleichsoperatoren und NULL-Werten kann SQL-Anfängern aufgrund einiger kontraintuitiver Verhaltensweisen Kopfzerbrechen bereiten. Wenn wir zum Beispiel testen, ob ein bestimmter Wert gleich NULL ist, ist das Ergebnis unbekannt, auch wenn der Spaltenwert NULL ist. Da die WHERE Klausel eine true Bedingungen erfordert, erhalten Sie null Zeilen mit einer Bedingung wie der folgenden:

SELECT *
FROM salespeople
WHERE commission_2021 = NULL;

Result:
Query has no result

Die Lösung besteht darin, die Operatoren IS NULL oder IS NOT NULL zu verwenden. So können Sie alle Datensätze abrufen, die NULL in der Spalte commision_2021 enthalten:

SELECT *
FROM salespeople
WHERE commission_2021 IS NULL;
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
37IanGarvey430000.08NULL1
38IvanStepanov410000.08NULL1

In diesem Leitfaden finden Sie weitere Beispiele für das Verhalten von NULL mit verschiedenen Vergleichsoperatoren.

IN-Operator - Abgleich mit einer Liste von Werten

Schließlich können Sie den IN Operator verwenden, um gegen eine vordefinierte Liste von Werten zu prüfen. Nehmen wir zum Beispiel an, Sie haben eine Liste von Mitarbeitern, deren Verdienst überprüft werden muss. Mit einer SQL-Abfrage wie dieser können Sie die erforderlichen Datensätze abrufen:

SELECT *
FROM salespeople
WHERE last_name IN (‘Kaplan’, ‘Gerard’, ‘Zuma’);
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
22DembeZuma400000.1231540.705
30KateKaplan540000.1025760.455
32MarvinGerard550000.1022500.005

Sieht perfekt aus! Bei der Verwendung verschiedener Operatoren in der WHERE-Klausel sind jedoch oft einige Syntax-Nuancen zu beachten. Um Ihnen die Arbeit zu erleichtern, haben wir ein 2-seitiges SQL für Anfänger Cheat Sheet vorbereitet, das zahlreiche Beispiele für die Verwendung von Operatoren zum Filtern der Ausgabe einer SQL-Abfrage enthält.

Kombinieren von Filterbedingungen in WHERE

In der Praxis ist eine einzige Bedingung in der WHERE Klausel oft nicht ausreichend. Glücklicherweise können Sie verschiedene Filterbedingungen mit den Operatoren AND, OR und NOT kombinieren:

  • Der Operator AND zeigt einen Datensatz an, wenn alle Bedingungen erfüllt sind.
  • Der Operator OR zeigt einen Datensatz an, wenn eine der Bedingungen erfüllt ist.
  • Der Operator NOT zeigt einen Datensatz an, wenn die entsprechende Bedingung nicht erfüllt ist.

Wie diese Operatoren funktionieren, wird anhand von Beispielen klarer.

Verwenden Sie die folgende Abfrage, um alle Verkäufer aufzulisten, die in der Filiale Nr. 5 arbeiten und ein Gehalt von 50.000 $ oder mehr haben:

SELECT *
FROM salespeople
WHERE branch_id = 5 AND salary >= 50000;

Um alle Datensätze abzurufen, bei denen der Nachname entweder "Kaplan" oder "Reddington" lautet, verwenden Sie die folgende Abfrage:

SELECT *
FROM salespeople
WHERE last_name = ‘Kaplan’ OR last_name = ‘Reddington’;

Um schließlich Informationen über alle Verkäufer mit Ausnahme derer, die in der Filiale Nr. 2 arbeiten, zu erhalten, verwenden Sie diese Abfrage:

SELECT *
FROM salespeople
WHERE NOT branch_id = 2;

Wenn Sie weitere Beispiele für die Verwendung von AND, OR und NOT erhalten möchten, lesen Sie diesen Artikel.

Um noch komplexere Filterbedingungen zu erstellen, können Sie mehrere Bedingungen mit AND, OR und NOT in derselben Anweisung WHERE kombinieren. Es ist jedoch wichtig, dass Sie sich die Rangfolge dieser Operatoren in SQL merken: NOT → AND → OR. Der besseren Übersichtlichkeit halber ist es sehr empfehlenswert, Klammern zu verwenden, auch wenn sie in einem bestimmten Fall nicht erforderlich sind.

Angenommen, wir möchten alle Datensätze abrufen, bei denen der Nachname eines Mitarbeiters entweder "Keen" oder "Park" lautet, seine Provisionseinnahmen im Jahr 2021 höher waren als sein Gehalt und er nicht in der Filiale 2 arbeitet. Hier ist eine mögliche Abfrage:

SELECT *
FROM salespeople
WHERE (last_name = ‘Keen’ OR last_name = ‘Park’) 
AND (commission_2021 > salary)
AND (NOT branch_id = 2);
idfirst_namelast_namesalarycommission_ratecommission_2021branch_id
21TomKeen410000.1241560.751

Und jetzt sind wir fertig mit Beispielen! Wenn Sie weitere Anleitungen zur WHERE-Klausel mit zusätzlichen Beispielen benötigen, lesen Sie weitere unserer anfängerfreundlichen Leitfäden. Und dann: Üben, üben, üben!

Zeit, die SQL WHERE-Klausel zu verwenden!

Der beste Weg, ein neues Konzept in SQL zu beherrschen, ist, es in mehreren Abfragen auszuprobieren. Für Anfänger sind interaktive Online-Kurse meiner Meinung nach die bequemste Umgebung, um etwas Neues zu üben - Sie haben alle Beispiele parat und können bequem von Ihrem Browser aus Abfragen schreiben.

Um SQL WHERE zu üben, empfehle ich Ihnen, mit unserem interaktiven SQL für Anfänger Kurs zu beginnen. Er deckt alles ab, was Sie brauchen, um Daten aus einer Datenbank abzurufen, einschließlich des Schreibens anspruchsvoller Filterbedingungen.

Noch mehr praktische Übungen finden Sie in der SQL-Praxis Lernpfad. Er umfasst 5 interaktive Kurse mit Hunderten von Programmieraufgaben.

Vielen Dank fürs Lesen und viel Spaß beim Lernen!