V SQL EXISTS
operátor určuje poddotaz, který má otestovat existenci řádků. Vrací TRUE
když poddotaz vrátí jeden nebo více řádků.
Poddotaz je dotaz, který je vnořen do jiného dotazu (nebo dokonce jiného poddotazu)
Tento článek obsahuje některé základní příklady EXISTS
operátor.
Tabulky zdrojů
Následující tabulky jsou použity pro příklady na této stránce.
SELECT * FROM PetTypes;
SELECT * FROM Pets;
Výsledek:
+-------------+-----------+ | 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)
Příklad
Zde je příklad demonstrující EXISTS
operátor.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Výsledek:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Tento příklad nám ukazuje, kolik druhů zvířat je v našem hotelu pro domácí mazlíčky. Ve skutečnosti existují čtyři typy mazlíčků, ale pouze tři z nich se shodují se skutečným mazlíčkem v Pets
tabulka.
To poskytuje stejný výsledek, jaký bychom dostali s následujícím dotazem, který používá IN
operátor.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Pomocí NOT EXISTS
Mohli bychom přidat NOT
operátora negovat výsledky a zjistit, kolik typů zvířat ne v našem zvířecím hotelu.
SELECT
pt.PetTypeId,
pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS (
SELECT p.PetTypeId
FROM Pets p
WHERE p.PetTypeId = pt.PetTypeId
);
Výsledek:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
V tomto případě naše databáze obsahuje mazlíčka typu Rabbit
, ale v současné době nemáme žádné králíky jako domácí mazlíčky.