30_SQL. Podzapytanie z operatorem ALL

Podzapytanie z operatorem ALL nie różni się istotnie od podzapytania z operatorem ANY. 

Skorzystamy z bezpłatnej bazy Oracle HR dostępnej tutaj:

http://www.oracle.com/technetwork/database/express-edition/downloads/index.html

Chcemy dowiedzieć się jaki jest średni czas zatrudnienia pracowników od chwili obecnej. Lista płac dotyczy aktualnie pracujących osób.

Posłużymy się operatorem ALL.

Chcemy dowiedzieć się kto pracował krócej niż 85

SELECT

EMPLOYEE_ID,

FIRST_NAME,

LAST_NAME,

HIRE_DATE,

SYSDATE,

ROUND(SYSDATE - HIRE_DATE) AS CZAS_ZATRUDNIENIA_W_DNIACH,

ROUND(MONTHS_BETWEEN (SYSDATE, HIRE_DATE)) as MIESIĘCY

FROM EMPLOYEES, dual

WHERE ROUND(SYSDATE - HIRE_DATE) < ALL (

SELECT

(AVG(SYSDATE - HIRE_DATE)*0.85)

FROM EMPLOYEES, dual);

Otrzymujemy tabelę wynikową czasu pracy pracowników zatrudnionych krócej niż 85

Możemy sprawdzić ile wynosi 85

SELECT

ROUND(AVG(SYSDATE - HIRE_DATE)) AS ŚREDNI_CZAS_DNI,

ROUND(AVG(SYSDATE - HIRE_DATE)*0.85) AS SKORYGOWANA_ŚREDNIA_CZASU

FROM EMPLOYEES, dual

Wynik: