MySQL WHERE-Klausel: AND, OR, IN, NOT IN Abfragebeispiel
⚡ Intelligente Zusammenfassung
MySQL Die WHERE-Klausel filtert Zeilen, bevor sie im Ergebnissatz landen, und wendet präzise Kriterien auf SELECT-, UPDATE- und DELETE-Anweisungen an. Das Verständnis der Operatoren AND, OR, IN, NOT IN und der Vergleichsoperatoren ermöglicht es Anfängern, genau die Datensätze abzurufen, die eine Abfrage benötigt.
Was ist die WHERE-Klausel? MySQL?
WHERE-Klausel in MySQL ist ein Schlüsselwort, mit dem die genauen Kriterien der Daten oder Zeilen angegeben werden, die von der angegebenen SQL-Anweisung betroffen sind. Die WHERE-Klausel kann mit SQL-Anweisungen wie INSERT, UPDATE, SELECT und DELETE verwendet werden, um Datensätze zu filtern und verschiedene Operationen an den Daten durchzuführen.
Wir haben uns angeschaut, wie man Daten von a abfragt Datenbank Verwenden der SELECT-Anweisung im vorherigen Tutorial. Die SELECT-Anweisung gab alle Ergebnisse aus der abgefragten Datenbanktabelle zurück.
Es gibt jedoch Fälle, in denen wir die Abfrageergebnisse auf eine bestimmte Bedingung beschränken möchten. Die WHERE-Klausel in SQL ist in solchen Situationen sehr hilfreich und funktioniert in anderen Kontexten genauso. DELETE- oder UPDATE-Abfrage wie es bei einer SELECT-Abfrage der Fall ist.
Syntax der WHERE-Klausel
Die grundlegende Syntax der WHERE-Klausel lautet wie folgt.
SELECT * FROM tableName WHERE condition;
HIER KLICKEN
- „SELECT * FROM tableName“ ist der Standard SELECT-Anweisung
- "WO" ist das Schlüsselwort, das die Ergebnismenge einschränkt, und "Zustand" ist der auf die Ergebnisse angewendete Filter. Der Filter kann ein Bereich, ein einzelner Wert oder eine Unterabfrage sein.
Angenommen, wir möchten die Details eines Mitglieds aus der Mitgliedertabelle abrufen, und zwar anhand der Mitgliedsnummer 1. Das folgende Skript erreicht dies.
SELECT * FROM `members` WHERE `membership_number` = 1;
Dieses Skript ausführen in MySQL Werkbank Die Eingabe von „myflixdb“ liefert das unten stehende Ergebnis.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Eine einzelne Bedingung reicht selten aus. Die folgenden Abschnitte kombinieren WHERE mit logische Operatoren.
WHERE-Klausel kombiniert mit – UND LOGISCH OperaDo.
Mit dem logischen Operator UND wird eine Zeile nur dann zurückgegeben, wenn ALLE angegebenen Kriterien erfüllt sind.
Angenommen, wir möchten alle Filme der Kategorie 2, die im Jahr 2008 erschienen sind. Das folgende Skript erreicht dies.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Die Ausführung des obigen Skripts für „myflixdb“ führt zu folgendem Ergebnis.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
UND verengt die Ergebnismenge. ODER erweitert sie.
WHERE-Klausel kombiniert mit – OR LOGISCH OperaDo.
Der OR-Operator gibt eine Zeile zurück, wenn mindestens eines der angegebenen Kriterien erfüllt ist.
Das folgende Skript ruft alle Filme entweder der Kategorie 1 oder der Kategorie 2 ab.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Das Ergebnis-Set wird unten angezeigt.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Die Verkettung vieler OR-Bedingungen wird dadurch unübersichtlich. Das Schlüsselwort IN löst dieses Problem.
WHERE-Klausel kombiniert mit – IN Stichwort (Keyword)
Die WHERE-Klausel wirkt sich in Verbindung mit dem Schlüsselwort IN nur auf Zeilen aus, deren Werte mit der angegebenen Liste übereinstimmen. IN reduziert die Anzahl der sonst erforderlichen OR-Klauseln.
Folgende MySQL Die WHERE IN-Abfrage liefert Zeilen, in denen membership_number entweder 1, 2 oder 3 ist.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Das Ergebnis-Set wird unten angezeigt.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
NOT IN führt den gegenteiligen Filter aus.
WHERE-Klausel kombiniert mit – NICHT IN Stichwort (Keyword)
Mit dem Schlüsselwort NOT IN schließt die WHERE-Klausel jede Zeile aus, deren Wert mit der angegebenen Liste übereinstimmt.
Die folgende Abfrage liefert Zeilen, in denen membership_number NICHT 1, 2 oder 3 ist.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Das Ergebnis-Set wird unten angezeigt.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
WHERE filtert außerdem Werte nach Größe und Gleichheit mithilfe von Vergleichsoperatoren.
WHERE-Klausel kombiniert mit – VERGLEICH Operatoren
Die Vergleichsoperatoren kleiner als (<), gleich (=), größer als (>) und ungleich (<>) können alle mit der WHERE-Klausel verwendet werden.
= Gleich
Das folgende Skript ruft alle weiblichen Mitglieder aus der Mitgliedertabelle unter Verwendung des Vergleichsoperators „Gleich“ ab.
SELECT * FROM `members` WHERE `gender` = 'Female';
Das Ergebnis-Set wird unten angezeigt.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Größer als
Das folgende Skript ruft alle Zahlungen über 2,000 aus der Zahlungstabelle ab.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Das Ergebnis-Set wird unten angezeigt.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> Nicht gleich
Das folgende Skript ruft alle Filme ab, deren Kategorie-ID ungleich 1 ist.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Das Ergebnis-Set wird unten angezeigt.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Kurzübersicht: WHERE-Klausel Operatoren
Die Operatoren, die am häufigsten mit WHERE verwendet werden, sind unten zusammengefasst. Vollständige Definitionen finden Sie im MySQL Bedienerreferenz.
| OperaDo. | Bedeutung | Beispielbedingung |
|---|---|---|
| = | Gleich | `gender` = 'Weiblich' |
| <> | Nicht gleichzusetzen mit | `category_id` <> 1 |
| > / | Größer als / kleiner als | `amount_paid` > 2000 |
| UND / ODER | Alle Kriterien / beliebige Kriterien | `category_id` = 2 UND `year_released` = 2008 |
| IN / NICHT IN | Entspricht einer Liste / schließt sie aus | `membership_number` IN (1,2,3) |
| IST NULL / IST NICHT NULL | Tests auf fehlende Werte | `postal_address` ist NULL |
⚠️ Hinweis: NULL passt niemals zu = oder <>. Verwenden Sie IS NULL oder IS NOT NULL, wenn eine Spalte möglicherweise keinen Wert enthält.
Rätsel: Finde verspätet zurückgegebene Filme
Angenommen, wir möchten die ausgeliehenen Filme, die bis zum 25.06.2012 nicht zurückgegeben wurden. Dies lässt sich durch die Kombination von WHERE mit dem Kleiner-als-Operator und AND erreichen.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Ausführen des obigen Skripts in MySQL Workbench liefert die folgenden Ergebnisse.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |


