I SQL er EXISTS
operator specificerer en underforespørgsel, der skal teste for eksistensen af rækker. Det returnerer TRUE
når underforespørgslen returnerer en eller flere rækker.
En underforespørgsel er en forespørgsel, der er indlejret i en anden forespørgsel (eller endda en anden underforespørgsel)
Denne artikel indeholder nogle grundlæggende eksempler på EXISTS
operatør.
Kildetabeller
Følgende tabeller bruges til eksemplerne på denne side.
SELECT * FROM PetTypes;
SELECT * FROM Pets;
Resultat:
+-------------+-----------+ | 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)
Eksempel
Her er et eksempel for at demonstrere EXISTS
operatør.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Resultat:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Dette eksempel viser os, hvor mange kæledyrstyper der er på vores kæledyrshotel. Der er faktisk fire kæledyrstyper, men kun tre af dem matcher med et faktisk kæledyr i Pets
tabel.
Dette giver det samme resultat, som vi ville have fået med følgende forespørgsel, der bruger IN
operatør.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Brug af NOT EXISTS
Vi kunne tilføje NOT
operatør for at afvise resultaterne og se, hvor mange kæledyrstyper der ikke er på vores dyrehotel.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Resultat:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
I dette tilfælde indeholder vores database en kæledyrstype Rabbit
, men vi har i øjeblikket ingen kaniner som kæledyr.