Jeżeli podzapytanie znajdzie zadaną wartość, wtedy zwraca true (prawda). Pokazuje wszystkie rekordy, nie tylko te szukane. Jeżeli wyrażenie EXISTS nie znajdzie szukanej wartości, wtedy zwraca pustą wartość.
Szukamy w bazie nie istniejącego imienia Joxn. Wynikiem zapytania jest pusta tabela.
SELECT
FIRST_NAME,
LAST_NAME,
SALARY
FROM EMPLOYEES
WHERE EXISTS
(SELECT FIRST_NAME
FROM EMPLOYEES
WHERE FIRST_NAME LIKE ‘JoXn’);
Teraz zamiast szukać imienia Joxn, sprawdzamy czy istnieje imię John. EXISTS wyświetla wszystkie zadane rekordy tabeli.
SELECT
FIRST_NAME,
LAST_NAME,
SALARY
FROM EMPLOYEES
WHERE EXISTS
(SELECT FIRST_NAME
FROM EMPLOYEES
WHERE FIRST_NAME LIKE ‘John’);
Teraz sprawdzimy czy żaden pracownik nie został wpisany do bazy EMPLOYEES dwa razy.
Korzystamy z bazy EMPLOYEES porównując ją do samej siebie, czyli fantomowej nieistniejącej bazy EMPLOYEES_SUB.
SELECT
*
FROM EMPLOYEES
WHERE EXISTS
(SELECT FIRST_NAME
FROM EMPLOYEES EMPLOYEES_SUB
WHERE EMPLOYEES.FIRST_NAME = EMPLOYEES_SUB.FIRST_NAME
AND EMPLOYEES.LAST_NAME = EMPLOYEES_SUB.LAST_NAME
AND EMPLOYEES.EMPLOYEE_ID <> EMPLOYEES_SUB.EMPLOYEE_ID);
Zapytanie wyświetliło brak danych. Żaden pracownik nie został wpisany do bazy dwa razy.
Wyrażenie EXISTS podobnie jak IN posiada wyrażenie odwrotne NOT EXISTS.
