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.

  • 🔍 Hauptzweck: Die WHERE-Klausel schränkt ein, welche Zeilen eine Anweisung betrifft, sodass SELECT, UPDATE und DELETE nur übereinstimmende Zeilen beeinflussen.
  • 🔗 UND Operator: Es werden nur dann Zeilen zurückgegeben, wenn jede Bedingung erfüllt ist, wodurch die Ergebnismenge eingeschränkt wird.
  • 🔀 OR Operator: Es werden Zeilen zurückgegeben, wenn auch nur eine einzige Bedingung als wahr ausgewertet wird, wodurch die Ergebnismenge erweitert wird.
  • 📋 DRIN und NICHT DRIN: Das Schlüsselwort IN gleicht eine Liste von Werten in einem Ausdruck ab, während NOT IN diese Liste ausschließt.
  • Vergleich OperaTore: Die Operatoren „gleich“ (=), „größer als“ (>), „kleiner als“ (<) und „ungleich“ (<>) filtern numerische, Text- und Datumsspalten.
  • ⚠️ NULL-Behandlung: NULL passt nie zu = oder <>, daher sind IS NULL und IS NOT NULL erforderlich, um auf fehlende Werte zu prüfen.

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.

WHERE-Klausel in MySQL

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 email
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 email
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 email
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 email
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

Häufig gestellte Fragen

WHERE filtert einzelne Zeilen vor der GruppierungpingDaher kann es keine Aggregatfunktionen referenzieren. HAVING filtert Gruppen, nachdem GROUP BY ausgeführt wurde, und ist daher der richtige Ort für Bedingungen wie COUNT(*) > 5.

Verwenden Sie IS NULL oder IS NOT NULL. OperaOperatoren wie = und <> geben für NULL ein unbekanntes Ergebnis zurück, daher findet `postal_address` = NULL keine Übereinstimmung, während `postal_address` IS NULL funktioniert.

Ja, wenn die gefilterte Spalte indiziert ist. MySQL Liest nur die übereinstimmenden Zeilen, anstatt die gesamte Tabelle zu durchsuchen.ping Eine Spalte in einer Funktion, wie z. B. YEAR(`date_of_birth`) = 1980, verhindert die Verwendung eines Index.

Ja. KI-Assistenten wandeln einfaches Englisch in SQL um, und MySQL Werkbank Das Ergebnis kann ausgeführt werden. RevÜberprüfen Sie jede Bedingung anhand Ihres Schemas, da ein Modell Spaltennamen erfinden kann.

Testen Sie es zuerst mit SELECT. Eine falsche WHERE-Klausel in einem DELETE- oder UPDATE-Abfrage Jede Zeile kann geändert werden. Die übereinstimmenden Zeilen können in der Vorschau angezeigt und anschließend dieselbe Bedingung für den Schreibvorgang wiederverwendet werden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: