Operatory Exists i Not Exists Operator Exists sprawdza czy kolejne elementy z jednego zbioru znajdują swój odpowiednik w drugim zbiorze. Istotny jest sam fakt zaistnienia odpowiednika po drugiej stronie, a nie ilość wystąpień. select * from departments d where exists( select * from employees e where e.department_id=d.department_id ); Powyższe zapytanie zwraca nam departamenty z tabeli departments w których pracuje jakikolwiek pracownik. W podzapytaniu występuje warunek where e.department_id=d.department_id , określający zasadę według której system poszukuje odpowiedników w podzbiorze. Brany jest każdy kolejny wiersz z tabeli departments , a następnie przeszukiwana tabela employees w poszukiwaniu wiersza który w polu department_id miałby taką samą wartość. Wystarczy znalezienie jednego odpowiednika i system przestaje skanować dane. Z tego wynika wydajnościowa przewaga operatora EXISTS nad operatorem IN , oraz NOT EXISTS nad operatorem NOT IN. Bezpłatne materiały edukacyjne. www.jsystems.pl A.Klusiewicz 1/2 Możemy też wykonać operację odwrotną, tj. wyświetlić te departamenty, w których nikt nie pracuje tj. które nie znajdują swojego odpowiednika w drugim zbiorze: select * from departments d where not exists( select * from employees e where e.department_id=d.department_id ); Bezpłatne materiały edukacyjne. www.jsystems.pl A.Klusiewicz 2/2