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

SQL EXISTS-Operator für Anfänger

In SQL ist EXISTS Der Operator gibt eine Unterabfrage an, die auf das Vorhandensein von Zeilen getestet werden soll. Es gibt TRUE zurück wenn die Unterabfrage eine oder mehrere Zeilen zurückgibt.

Eine Unterabfrage ist eine Abfrage, die in einer anderen Abfrage (oder sogar einer anderen Unterabfrage) verschachtelt ist

Dieser Artikel enthält einige grundlegende Beispiele für EXISTS Betreiber.

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 EXISTS zu demonstrieren Betreiber.

SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Ergebnis:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Dieses Beispiel zeigt uns, wie viele Tierarten es in unserem Tierhotel gibt. Es gibt eigentlich vier Arten von Haustieren, aber nur drei davon passen zu einem echten Haustier in den Pets Tabelle.

Dies liefert das gleiche Ergebnis, das wir mit der folgenden Abfrage erhalten hätten, die den IN verwendet Betreiber.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Mit NOT EXISTS

Wir könnten das NOT hinzufügen Operator, um die Ergebnisse zu negieren und zu sehen, wie viele Arten von Haustieren nicht sind in unserem Tierhotel.

SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Ergebnis:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

In diesem Fall enthält unsere Datenbank eine Haustierart von Rabbit , aber wir haben derzeit keine Kaninchen als Haustiere.