28_SQL. Wyrażenie EXISTS

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.