29_SQL. Podzapytanie z operatorem ANY

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ą: