24th Nov 2022 9 Leseminuten Der vollständige Leitfaden zur SQL WHERE-Klausel Kateryna Koidan SQL-Grundlagen Inhaltsverzeichnis Die WHERE-Klausel in SQL Operatoren zur Verwendung mit SQL WHERE Numerische Werte Text-Werte Vergleiche mit NULL-Werten IN-Operator - Abgleich mit einer Liste von Werten Kombinieren von Filterbedingungen in WHERE Zeit, die SQL WHERE-Klausel zu verwenden! 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! Tags: SQL-Grundlagen