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