Podzapytania w Oracle

W artykule dowiemy się jak używać klauzul any, all, exists i not exists w podzapytaniach w ORACLE.

Jak używać where exists w Oracle ? Podzapytania można umieścić w trzech elementach zapytania:
po słowie FROM – podzapytanie może ( a nawet powinno) zwracać wiele rekordów i pól.
w SELECT i WHERE – w zasadzie podzapytanie powinno zwracać jedną wartość, np: SELECT avg(cena) from PRODUKTY. Poniżej znajdziemy wyjątki, kiedy podzapytanie może zwracać więcej niż jedną wartość.

Poniżej znajdziemy przykłady wyjątków, kiedy podzapytanie może zwracać więcej niż jedną wartość.

W omawianych przykładach posługujemy się schematem HR, który jest dostarczany wraz z podstawową instalacją ORACLE. Domyślnie jedak schemat ten jest wyłączony. Aby go włączyć wydajemy polecenie:

ALTER USER HR ACCOUNT UNLOCK;

użytkownik będzie musiał zmienić hasło.

Poniżej przykłady podzapytania:
1. Chcielibyśmy wyświetlić tylko tych pracowników których wypłata jest większa od wypłaty przynajmniej jednej osoby z departamentu o numerze 100.

Przykładowe zapytanie może wyglądać tak:
select last_name, salary from employees where salary > ANY (select salary from employees where department_id=100);

2. W drugim przykładzie chcemy pokazać tylko takich pracowników (kolumny last_name, salary), których wypłata jest większa od wypłaty wszystkich z departamentu o numerze 100.


select last_name, salary from employees where salary > ALL (select salary from employees where department_id=100);

Exists i not exists

Operatorów: where exists używamy gdy chcemy sprawdzić czy podzapytanie zwraca jakiekolwiek wiersze.

Przykład 1. Wyświetlamy tych pracowników którzy są managerami któregokolwiek z departamentów

select employee_id from employees e where exists (select manager_id from departments d where d.manager_id=e.employee_id);

Przykład 2. Zapytanie pokazuje tych pracowników którzy nie są managerami żadnego departamentu.


select employee_id from employees e where not exists (select manager_id from departments d where d.manager_id=e.employee_id);