Jeśli podzapytanie zwraca jakąkolwiek wartość, wtedy wyrażenie EXISTS podzapytanie zwraca wartość TRUE, natomiast NOT EXISTS podzapytanie zwraca FALSE.
Na przykład (patrz listing 1.0).
W przykładzie tym, jeśli tab2 zawiera jakiekolwiek wiersze, nawet wiersze, kóre nie zwierają nic innego poza wartością NULL wtedy warunek EXISTS jest zawsze równy TRUE.
Następne przykłady:
-
Jaki rodzaj sklepu występuje w jednym lub więcej miejscowościach? (patrz listing 2.0)
-
Jakiego rodzaju sklepu nie ma w żadnym mieście? (patrz listing3.0)
-
Jaki rodzaj sklepu występuje we wszystkich miastach? (patrz listing 4.0)
W ostatnim przykładzie mamy podwójnie zagnieżdżone zapytanie z NOT EXISTS. Formalnie, to zapytanie to brzmi: "czy istnieje miasto ze sklepem, którego nie ma wśród sklepów"? Ale można też prościej zapytać po prostu: "czy x jest prawdziwe dla wszystkich y"?
Listing
SELECT col1 FROM tab1 WHERE EXISTS (SELECT * FROM tab2);
--Listing 2.0
SELECT DISTINCT rodzaj_sklepu FROM sklepy
WHERE EXISTS (SELECT * FROM miasta_sklepy
WHERE miasta_sklepy.rodzaj_sklepu = sklepy.rodzaj_sklepu);
--Listing 3.0
SELECT DISTINCT rodzaj_sklepu FROM sklepy
WHERE NOT EXISTS (SELECT * FROM miasta_sklepy
WHERE miasta_sklepy.rodzaj_sklepu = sklepy.rodzaj_sklepu);
--Listing 4.0
SELECT DISTINCT rodzaj_sklepu FROM Stores S1
WHERE NOT EXISTS (
SELECT * FROM miasta WHERE NOT EXISTS (
SELECT * FROM miasta_sklepy
WHERE miasta_sklepy.miasto = miasta.miasto
AND miasta_sklepy.rodzaj_sklepu = sklepy.rodzaj_sklepu));
Ranga: Administrator serwisu Punktów: 0

