Wyrażenie EXISTS (w niektórych bazach EXIST) podobnie jak IN i NOT IN służy do budowania podzapytań. Wyrażenie EXISTS nie wymaga aby pomiędzy WHERE a IN wpisywać nazwę kolumny.
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.