26th Jun 2024 9 Leseminuten Wie man eine WHERE-Klausel in SQL schreibt Himanshu Kathuria SQL-Grundlagen Inhaltsverzeichnis Grundlegende Syntax einer SQL-Abfrage mit einer WHERE-Klausel Die SQL WHERE-Klausel mit einer einzigen Bedingung Die SQL WHERE-Klausel mit mehreren Bedingungen Verwendung von bedingten Operatoren Verwendung eines IN Operators Verwendung des IN-Operators in einer Unterabfrage Komplexere Bedingungen Was Sie nicht in einer WHERE-Klausel verwenden können Sind Sie bereit, die SQL WHERE-Klausel in Ihren Abfragen zu verwenden? Wir erklären die Verwendung der SQL WHERE-Klausel anhand von praktischen Beispielen. Wenn Sie gerade erst angefangen haben, SQL zu lernen und wissen wollen, wie Sie nur einen bestimmten Teil der in Ihren Tabellen gespeicherten Daten abrufen oder bearbeiten können, dann ist dieser Artikel genau das Richtige für Sie! Die SQL-Klausel WHERE müssen Sie beherrschen, wenn Sie SQL für die Arbeit mit Daten nutzen wollen. Sie ist wohl eines der grundlegendsten Konstrukte von SQL, das man lernen muss. Meiner Erfahrung nach gibt es kaum eine Abfrage zum Abruf oder zur Bearbeitung von Daten, die keine WHERE Klausel verwendet. Das Filtern der Details der Angestellten, die zu einer bestimmten Abteilung gehören, das Auswählen der Bestellungen mit Werten über einem bestimmten Betrag oder das Abrufen einer Liste von Kunden, die zu einer bestimmten geografischen Region gehören, erfordern alle, dass Sie die WHERE Klausel auf die eine oder andere Weise in Ihren Abfragen verwenden. Frage: Was ist SQL Where? Die SQL-Klausel WHERE filtert Datensätze auf der Grundlage bestimmter Bedingungen; sie ermöglicht es Ihnen, Daten in einer Datenbank selektiv abzurufen, zu ändern oder zu löschen. Sie ist wichtig, um in den Operationen SELECT, UPDATE oder DELETE genaue Zeilen anzusteuern. Dies sind natürlich nur einige Beispiele. Im Allgemeinen können Sie die SQL-Klausel WHERE verwenden, um beliebige Zeilen aus Ihren Tabellen zu filtern. Fangen wir also ohne Umschweife direkt an! Grundlegende Syntax einer SQL-Abfrage mit einer WHERE-Klausel Die grundlegende Syntax einer SQL-Abfrage, die eine WHERE -Klausel verwendet, lautet wie folgt: SELECT <column names> FROM <table name> WHERE <conditions>; Die WHERE -Klausel folgt auf die SELECT - und die FROM -Klausel. Während die SELECT -Klausel die Spalten angibt, die aus der/den Tabelle(n) zurückgegeben werden sollen, enthält die WHERE -Klausel die Bedingungen, die als wahr bewertet werden müssen, damit eine Zeile als Ergebnis zurückgegeben werden kann. Jede Bedingung wird für jede Zeile ausgewertet, die aus der/den Tabelle(n) zurückgegeben wird. SQL verfügt über eine Vielzahl von bedingten Operatoren, mit denen Sie angeben können, wie die benötigten Zeilen gefiltert werden sollen. Um dies besser zu erklären, möchte ich Ihnen einige SQL WHERE Beispiele zeigen. Die SQL WHERE-Klausel mit einer einzigen Bedingung Stellen Sie sich vor, Sie arbeiten in einem multinationalen Unternehmen mit Niederlassungen rund um den Globus. Die Daten dieser Niederlassungen sind in einer Datenbank gespeichert, und zwar in einer Tabelle namens offices. Die Tabelle offices Tabelle: office_codecitystatecountrypostal_codeterritory 1San FranciscoCAUSA94080NA 2BostonMAUSA02107NA 3NYCNYUSA10022NA 4ParisNULLFrance75017EMEA 5TokyoChiyoda-KuJapanNULLJAPAC 6SydneyNULLAustraliaNSW-2010JAPAC 7LondonNULLUKEC2N 1HNEMEA Angenommen, Sie möchten eine Liste der Niederlassungen in den USA. Ihre Abfrage sieht wie folgt aus: SELECT * FROM offices WHERE country = 'USA'; Die Ausgabe: office_codecitystatecountrypostal_codeterritory 1San FranciscoCAUSA94080NA 2BostonMAUSA02107NA 3NYCNYUSA10022NA Bei dieser Abfrage wertet SQL zunächst jede Zeile aus und vergleicht den Wert der Spalte country mit 'USA'. Anschließend werden nur die Zeilen zurückgegeben, für die die Bedingung als wahr ausgewertet wird. In unserem Fall haben wir drei Zeilen, in denen das Land die USA ist. (Wenn Sie zu diesem Zeitpunkt noch nicht wissen, wie man Abfragen schreibt, empfehle ich Ihnen, den SQL-Grundlagenkurs von LearnSQL.de. Er ist nicht nur gut strukturiert, sondern enthält auch einige tolle Übungen, die Sie beim Lernen und Wachsen unterstützen). Sie können auch Vergleichsoperatoren wie >, <, >=, <= und <> verwenden, um Werte zu vergleichen. Nehmen wir an, Sie möchten nur die Zeilen abrufen, in denen office_code größer als 5 ist. Die Abfrage: SELECT * FROM offices WHERE office_code > 5; Die Ausgabe: office_codecitystatecountrypostal_codeterritory 6SydneyNULLAustraliaNSW-2010APAC 7LondonNULLUKEC2N 1HNEMEA Oder, wenn Sie alle Zeilen abrufen wollen, in denen territory nicht 'NA' ist, sieht die Abfrage wie folgt aus: SELECT * FROM offices WHERE territory <> 'NA'; Die Ausgabe: office_codecitystatecountrypostal_codeterritory 4ParisNULLFrance75017EMEA 5TokyoChiyoda-KuJapanNULLJAPAC 6SydneyNULLAustraliaNSW-2010JAPAC 7LondonNULLUKEC2N 1HNEMEA Die SQL WHERE-Klausel mit mehreren Bedingungen Bisher habe ich sehr einfache Beispiele für Abfragen behandelt, die die Verwendung einer SQL WHERE-Klausel mit einer einzigen Bedingung veranschaulichen. Wenn Sie jedoch praktische, reale Abfragen schreiben, verwenden Sie oft mehr als eine Bedingung, um die gewünschten Ergebnisse zu erhalten. Verwendung von bedingten Operatoren SQL verfügt über die bedingten Operatoren AND, OR und NOT, um die Anzahl der in einer Abfrage verwendeten Bedingungen zu erweitern. Mit dem Operator AND können Sie Bedingungen verknüpfen, wenn Sie nur die Zeilen erhalten möchten, die alle Bedingungen erfüllen. Im Gegensatz dazu verwenden Sie den Operator OR, wenn Sie alle Zeilen abrufen möchten, für die mindestens eine der Bedingungen erfüllt ist. Angenommen, Sie möchten die Städte und Länder aller Büros in Großbritannien oder Frankreich abrufen. Wie Sie vielleicht schon erraten haben, verwenden Sie dazu den Operator OR. Die Abfrage: SELECT city, country FROM offices WHERE country = 'UK' OR country = 'France'; Die Ausgabe: citycountry ParisFrance LondonUK Hier gibt SQL die Zeilen zurück, für die eine oder beide Bedingungen erfüllt sind. In der Praxis gibt es eine bessere Möglichkeit, diese Abfrage mit dem IN-Operator zu schreiben. Verwendung eines IN Operators Mit dem IN Operator können Sie eine Liste von Werten angeben, gegen die geprüft werden soll. Siehe die folgende Abfrage: SELECT city, country FROM offices WHERE country IN ('UK', 'France'); Die Ausgabe: citycountry ParisFrance LondonUK Hier werden alle Zeilen zurückgegeben, deren Länder in der Liste der angegebenen Werte enthalten sind (in unserem Fall das Vereinigte Königreich und Frankreich). Mit dem Operator IN können Sie eine Liste mit vielen Werten angeben, nicht nur zwei. Mit dem Operator NOT IN können Sie die Zeilen zurückgeben, deren Werte nicht in der Liste enthalten sind. So können Sie zum Beispiel die Postleitzahlen aller Büros abrufen, die nicht im Gebiet JAPAC oder EMEA liegen. Verwendung des IN-Operators in einer Unterabfrage Eine weitere Möglichkeit, den Operator IN zu verwenden, ist eine Unterabfrage, um eine Liste aus einer anderen Tabelle zu erstellen. Um dies besser zu verstehen, stellen Sie sich vor, Sie haben eine andere Tabelle, die die Einnahmen für jede Niederlassung enthält. Die office_revenue Tabelle: office_coderevenue 1100002 2232221 3545556 4543432 5765678 6433433 7123245 Sie möchten wissen, welche Niederlassungen nicht genügend Einnahmen erzielen, und Sie definieren dies als Niederlassungen mit Einnahmen von weniger als 200.000. Das bedeutet, dass Sie die Städte der Niederlassungen mit weniger als 200.000 Euro Umsatz finden müssen. Die Abfrage: SELECT city FROM offices WHERE office_code IN (SELECT office_code FROM office_revenue WHERE revenue < 200000); Die Ausgabe: city San Francisco London In dieser Abfrage verarbeitet SQL zunächst die Unterabfrage, um eine Liste der Bürocodes für die Büros mit einem Umsatz von weniger als 200.000 zurückzugeben. Die Bürocodes in der Tabelle offices werden dann mit dieser Liste verglichen, um die Zeilen zurückzugeben, die denjenigen in der Liste entsprechen. Komplexere Bedingungen Versuchen wir ein etwas komplexeres Beispiel. Wie wäre es, wenn Sie die Bürocodes und die Städte aller Büros abrufen möchten, die im Gebiet JAPAC oder EMEA liegen, deren Postleitzahlen nicht NULL sind, für die kein Bundesland angegeben ist und deren Bürocodes größer oder gleich 5 sind? Ein guter Ansatz zum Schreiben dieser Abfrage besteht darin, die Bedingungen einzeln zu isolieren und jede mit den verfügbaren Spalten zu verknüpfen: Die territory ist entweder JAPAC oder EMEA. Die postal_code ist nicht NULL. Der Status ist NULL oder leer. office_code ist größer als oder gleich 5. Da Sie nun die Bedingungen verstehen, wird das Schreiben der Abfrage zum Kinderspiel. Beachten Sie, dass alle diese Bedingungen erfüllt sein müssen, damit eine Zeile zurückgegeben wird. Die Abfrage: SELECT office_code, city FROM offices WHERE territory IN ('JAPAC', 'EMEA') AND postal_code IS NOT NULL AND (state IS NULL OR state = '') AND office_code >= 5; Die Ausgabe: office_codecity 6Sydney 7London Die Bedingungen werden auf die folgende Weise ausgewertet. Mit der ersten Bedingung gibt SQL nur die Zeilen zurück, deren Territorium JAPAC oder EMEA ist. Von diesen Zeilen wird dann geprüft, ob die Postleitzahl NULL lautet. Dann wird die dritte Bedingung berücksichtigt, bei der wir die Klammern verwenden. Die beiden Bedingungen in den Klammern werden ausgewertet, um ein gemeinsames Ergebnis zu erhalten: Es wird der Wert der Spalte state geprüft und wahr zurückgegeben, wenn er entweder leer oder NULL ist. Schließlich filtert die letzte Bedingung die Zeilen mit office_code größer oder gleich 5. Daher werden nur die Büros in Sydney und London in das Ergebnis aufgenommen. Beachten Sie, dass wir postal_code <> NULL or state = NULL nicht verwenden. Stattdessen haben wir die Operatoren IS NOT und IS verwendet, um Werte mit NULL herauszufiltern . Der Grund dafür ist, dass NULL etwas ist, das unbekannt ist oder nicht existiert und daher niemals mit einem anderen Wert gleichgesetzt werden kann. SQL wirft keinen Fehler aus, wenn Sie = oder <> verwenden, aber stattdessen erhalten Sie eine leere Menge als Ergebnis und es werden keine Zeilen zurückgegeben. Das ist offensichtlich falsch. Nehmen wir an, Sie haben dieselbe Anforderung, nur dass Sie jetzt alle Bürocodes erhalten möchten, die größer als oder gleich 4, aber kleiner als oder gleich 6 sind. Hierfür können Sie den Operator BETWEEN verwenden. Die Abfrage: SELECT office_code, city FROM offices WHERE territory IN ('JAPAC', 'EMEA') AND postal_code IS NOT NULL AND (state is NULL OR state ='') AND office_code BETWEEN 4 AND 6; Die Ausgabe: office_codecity 4Paris 6Sydney Der Operator BETWEEN sucht nach einem Bereich von Werten zwischen 4 und 6, einschließlich der Grenzen. Jetzt sehen Sie zwei zurückgegebene Zeilen: Paris und Sydney. Was Sie nicht in einer WHERE-Klausel verwenden können Sie können Aggregatfunktionen nicht direkt in einer WHERE Klausel verwenden. Das liegt daran, dass die Bedingungen in einer WHERE -Klausel zeilenweise ausgewertet werden, während Aggregatfunktionen mehrere Zeilen bearbeiten, um ein einziges Ergebnis zurückzugeben. Betrachten Sie dieses Beispiel. Sie möchten alle Bürocodes zurückgeben, deren Umsatz über dem Durchschnitt liegt. Vielleicht ist Ihr erster Instinkt, etwas wie dieses zu schreiben: SELECT office_code FROM office_revenue WHERE revenue > AVG(revenue); Diese Abfrage gibt jedoch einen Fehler zurück: ERROR 1111 (HY000): Invalid use of group function Das Filtern von Datensätzen mit Aggregatfunktionen kann mit einer Unterabfrage erreicht werden. Schauen Sie sich das an: SELECT office_code, revenue FROM office_revenue WHERE revenue > (SELECT AVG(revenue) FROM office_revenue); Die Ausgabe: office_coderevenue 3545556 4543432 5765678 6433433 In dieser Abfrage ruft SQL zunächst den durchschnittlichen Umsatz aus der Unterabfrage ab. Dann vergleicht es diesen Wert mit dem Umsatz für jede Zeile und gibt nur die Bürocodes zurück, deren Umsatz über dem Durchschnittswert liegt. Sind Sie bereit, die SQL WHERE-Klausel in Ihren Abfragen zu verwenden? Nachdem Sie diesen Artikel gelesen haben, wissen Sie nun, wie Sie die SQL-Klausel WHERE verwenden können. Die Abfragen in diesem Artikel sind grundlegend und eignen sich gut für einen Anfänger. Wenn Sie vor kurzem mit dem Erlernen von SQL begonnen haben und Ihr Wachstum beschleunigen möchten, empfehle ich Ihnen diesen Titel von LearnSQL.de. Ich bevorzuge diesen, weil er für einen SQL-Neuling so umfassend ist. Er bildet eine hervorragende Grundlage für einen Analysten - oder für jeden, der SQL verwendet - und bietet eine gute Basis für das Schreiben von Abfragen, die Sie tagtäglich verwenden, um Erkenntnisse aus Daten zu gewinnen. Was ich jedoch nicht genug betonen kann, ist die Notwendigkeit von praktischer Übung und Konsistenz. Das zementiert das Gelernte. Sie können damit beginnen, jeden Tag 10-20 Abfragen zu schreiben, um zu üben; innerhalb von 3 Monaten werden Sie fast 1.800 Abfragen geschrieben haben! Das Tolle an SQL ist, dass es so einfach und gleichzeitig so leistungsstark ist. Also, worauf warten Sie noch? Machen Sie sich sofort die Hände schmutzig!! Tags: SQL-Grundlagen