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);
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:

