Podzapytanie z operatorem ANY służy do porównywania i wybierania rekordów. W języku wyrażeń logicznych ANY oznacza KAŻDY.
Skorzystamy z bezpłatnej bazy Oracle HR dostępnej tutaj:
http://www.oracle.com/technetwork/database/express-edition/downloads/index.html
Trzy przykłady użycia podzapytania ANY
Podzapytanie z operatorem ANY wskaże wszystkich pracowników, których pensja są dwukrotnie wyższe od średniej. Średnie wynagrodzenie w tabeli EMPLOYEES wznosi 6 461,8.
SELECT
FIRST_NAME,
LAST_NAME,
SALARY
FROM EMPLOYEES
WHERE SALARY > ANY
(SELECT (2*AVG(SALARY))
FROM EMPLOYEES);
Otrzymujemy tabelę wynikową:
Teraz wyświetlimy wszystkie nazwy departamentów, których ID jest większe niż 150.
SELECT
DEPARTMENT_ID,
DEPARTMENT_NAME
FROM DEPARTMENTS
WHERE DEPARTMENT_ID > ANY
(SELECT 150
FROM DEPARTMENTS);
Otrzymujemy tabelę wynikową:
Tym razem chcemy dowiedzieć się kto ma najbardziej niestabilne wynagrodzenie. Obliczyliśmy dla każdego pracownika różnicę między jego maksymalnym i minimalnym wynagrodzeniem i wskazaliśmy pracowników, których różnica pomiędzy maksymalnym i minimalnym wynagrodzeniem jest większa od trzykrotnego odchylenia standardowego dla wszystkich wynagrodzeń.
SELECT
EMPLOYEES.FIRST_NAME,
EMPLOYEES.LAST_NAME,
EMPLOYEES.SALARY,
JOBS.MIN_SALARY,
JOBS.MAX_SALARY,
(JOBS.MAX_SALARY - JOBS.MIN_SALARY)
FROM EMPLOYEES, JOBS
WHERE JOBS.JOB_ID = EMPLOYEES.JOB_ID AND
(JOBS.MAX_SALARY - JOBS.MIN_SALARY)> ANY
(SELECT (3*STDDEV(EMPLOYEES.SALARY))
FROM EMPLOYEES);
Otrzymujemy tabelę wynikową:



