MySQL IN
Zusammenfassung: In diesem Tutorial lernen Sie, wie Sie den MySQL IN
-Operator verwenden, um festzustellen, ob ein angegebener Wert mit einem beliebigen Wert in einer Liste oder einer Subquery übereinstimmt.
Einführung in den MySQL IN-Operator
Mit dem IN
-Operator können Sie feststellen, ob ein angegebener Wert mit einem beliebigen Wert in einer Menge von Werten oder einer Unterabfrage übereinstimmt.
Das Folgende illustriert die Syntax des IN
-Operators:
Code language: SQL (Structured Query Language) (sql)SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Lassen Sie uns die Abfrage genauer untersuchen:
- Verwenden Sie ein
column
oder einen Ausdruck (expr
) mit demIN
-Operator in derWHERE
-Klausel. - Trennen Sie die Werte in der Liste durch Kommata (,).
Der IN
-Operator gibt 1 zurück, wenn der Wert des column_1
oder das Ergebnis des expr
-Ausdrucks gleich einem beliebigen Wert in der Liste ist, andernfalls gibt er 0 zurück.
Wenn die Werte in der Liste alle Konstanten sind, führt MySQL die folgenden Schritte durch:
- Erst werden die Werte basierend auf dem Typ des
column_1
oder dem Ergebnis desexpr
-Ausdrucks ausgewertet. - Zweitens: Sortieren Sie die Werte.
- Drittens: Suchen Sie den Wert mithilfe des binären Suchalgorithmus. Daher führt eine Abfrage, die den
IN
-Operator mit einer Liste von Konstanten verwendet, sehr schnell aus.
Beachten Sie, dass der Operator IN
NULL
zurückgibt, wenn der expr
oder irgendein Wert in der Liste NULL
ist.
Sie können den IN
-Operator mit dem NOT
-Operator kombinieren, um festzustellen, ob ein Wert mit keinem Wert in einer Liste oder einer Subquery übereinstimmt. Und Sie können den IN
-Operator auch in der WHERE
-Klausel anderer Anweisungen wie UPDATE
und DELETE
verwenden.
MySQL IN-Operator Beispiele
Lassen Sie uns mit einigen Beispielen die Verwendung des IN
Operators üben. Sehen Sie sich die folgende offices
Tabelle aus der Beispieldatenbank an:
Wenn Sie die Büros in den USA und Frankreich befinden, können Sie den IN
-Operator wie die folgende Abfrage verwenden:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Ausprobieren
Das gleiche Ergebnis können Sie mit dem OR
-Operator als folgende Abfrage erreichen:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Versuchen Sie es
Falls die Liste viele Werte hat, müssen Sie eine sehr lange Anweisung mit mehreren OR
-Operatoren konstruieren. Mit dem IN
-Operator können Sie die Abfrage daher kürzen und lesbarer machen.
Um Büros zu erhalten, die sich nicht in den USA und Frankreich befinden, verwenden Sie NOT IN
in der WHERE
-Klausel wie folgt:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Ausprobieren
MySQL IN mit einer Subquery verwenden
Der IN
-Operator wird oft mit einer Subquery verwendet. Anstatt eine Liste von literalen Werten zu liefern, holt sich die Subquery eine Liste von Werten aus einer oder mehreren Tabellen und verwendet sie als Eingabewerte des IN
-Operators.
Werfen wir einen Blick auf die orders
und orderDetails
Tabellen aus der Beispieldatenbank:
Zum Beispiel, wenn Sie die Bestellungen finden wollen, deren Gesamtwerte größer sind als 60,000
, verwenden Sie den Operator IN
wie in der folgenden Abfrage gezeigt:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN( SELECT orderNumber FROM orderDetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000);
Ausprobieren
Die gesamte obige Abfrage kann in zwei separate Abfragen zerlegt werden.
Zunächst gibt die Subquery eine Liste von Bestellnummern zurück, deren Werte größer sind als 60,000
unter Verwendung der GROUP BY
und HAVING
Klauseln:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Ausprobieren
Zweitens, verwendet die äußere Abfrage den IN
-Operator in der WHERE
-Klausel, um Daten aus der orders
-Tabelle zu erhalten:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Ausprobieren
In diesem Tutorial haben Sie gelernt, wie man den MySQL IN
-Operator verwendet, um festzustellen, ob ein Wert mit einem beliebigen Wert in einer Liste von Werten übereinstimmt.
- War dieses Tutorial hilfreich?
- JaNein