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% średniego czasu zatrudnienia.

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% średniego czasu pracy :

Możemy sprawdzić ile wynosi 85% średniego czasu pracy. Taką średnią nazwiemy: Skorygowaną średnią czasu.

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: