In SQL der IN
Mit dem Operator können Sie Ihre Abfrageergebnisse basierend auf einer Liste von Werten filtern.
Sie können es auch verwenden, um jeden Wert abzugleichen, der von einer Unterabfrage zurückgegeben wird (eine Unterabfrage ist eine Abfrage, die in einer anderen Abfrage verschachtelt ist).
Quelltabellen
Die folgenden Tabellen werden für die Beispiele auf dieser Seite verwendet.
SELECT * FROM PetTypes;
SELECT * FROM Pets;
Ergebnis:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | | 4 | Rabbit | +-------------+-----------+ (4 rows affected) +---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
Beispiel
Hier ist ein Beispiel, um den IN
zu demonstrieren Betreiber.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');
Ergebnis:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 4 | Wag | 2020-03-15 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | +---------+-----------+------------+
Wir könnten dasselbe Ergebnis erzielen, indem wir zwei OR
verwenden Operatoren:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR PetName = 'Bark'
OR PetName = 'Wag';
Allerdings ist der IN
Operator ist eine prägnantere Möglichkeit, dies zu tun. Der IN
Der Operator ist besonders nützlich, wenn Sie eine lange Liste von Werten haben, mit denen Sie vergleichen möchten.
Der IN
-Operator wird fast immer schneller ausgeführt als mehrere OR
Operatoren, insbesondere bei größeren Datensätzen.
Numerische Werte
Die Werte sind nicht nur auf Zeichenfolgen beschränkt. Sie können beispielsweise IN
verwenden auf einer Liste numerischer Werte.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 5);
Ergebnis:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+
Termine
Hier ist ein Beispiel, das eine Datumsliste verwendet.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE DOB IN (
'2020-11-20',
'2018-10-01',
'2015-10-01'
);
Ergebnis:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | +---------+-----------+------------+
Mit IN
mit Unterabfragen
Ein weiterer Vorteil des IN
Operator, ist, dass er ein weiteres SELECT
enthalten kann aufführen. Dies wird als Unterabfrage bezeichnet . Eine Unterabfrage ist eine Abfrage, die in eine andere Abfrage (oder sogar eine andere Unterabfrage) eingebettet ist.
Hier ist ein Beispiel.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Ergebnis:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Dieses Beispiel zeigt uns, wie viele Tierarten es in unserem Tierhotel gibt.
Mit NOT IN
Wir könnten das NOT
hinzufügen Bediener, um dies umzudrehen und zu sehen, wie viele Arten von Haustieren nicht sind in unserem Tierhotel.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );
Ergebnis:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
In diesem Fall enthält unsere Datenbank eine Haustierart von Rabbit
, aber wir haben derzeit keine Kaninchen als Haustiere.
Ausdrücke
Die bereitgestellten Werte sind eine Liste von Ausdrücken. Daher können Sie Folgendes tun:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 2 + 3);
Ergebnis:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+