In SQL bestaat de EXISTS
operator specificeert een subquery om te testen op het bestaan van rijen. Het retourneert TRUE
wanneer de subquery een of meer rijen retourneert.
Een subquery is een query die is genest in een andere query (of zelfs een andere subquery)
Dit artikel bevat enkele basisvoorbeelden van de EXISTS
telefoniste.
Brontabellen
De volgende tabellen worden gebruikt voor de voorbeelden op deze pagina.
SELECT * FROM PetTypes;
SELECT * FROM Pets;
Resultaat:
+-------------+-----------+ | 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)
Voorbeeld
Hier is een voorbeeld om de EXISTS
te demonstreren telefoniste.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Resultaat:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Dit voorbeeld laat ons zien hoeveel soorten huisdieren er in ons dierenhotel zijn. Er zijn eigenlijk vier soorten huisdieren, maar slechts drie daarvan komen overeen met een echt huisdier in de Pets
tafel.
Dit levert hetzelfde resultaat op dat we zouden hebben gekregen met de volgende zoekopdracht die de IN
. gebruikt telefoniste.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Gebruik NOT EXISTS
We kunnen de NOT
. toevoegen operator om de resultaten te negeren en te zien hoeveel huisdiertypes niet zijn in ons dierenhotel.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Resultaat:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
In dit geval bevat onze database het huisdiertype Rabbit
, maar we hebben momenteel geen konijnen als huisdier.