Database
 sql >> Datenbank >  >> RDS >> Database

SQL IN-Operator für Anfänger

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