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.