Sous-requêtes
Vous pouvez utiliser une sous-requête dans des prédicats quantifiés et dans le prédicat EXISTS ou le prédicat IN. Une sous-requête ne doit désigner qu'un seul élément dans la clause SELECT.
Lorsqu'une expression de chemin d'accès apparaît dans une sous-requête, la variable d'identification de l'expression de chemin d'accès doit être définie dans la sous-requête, dans l'une des sous-requêtes contenantes, ou dans la requête externe. Une sous-requête scalaire est une sous-requête qui renvoie une valeur unique. Ce type de sous-requête est utilisable dans un prédicat de base et dans la clause SELECT d'une requête dynamique.
Exemple : Sous-requêtes
SELECT OBJECT(e) FROM EmpBean e WHERE e.salary > ( SELECT AVG(e1.salary) FROM EmpBean e1)
La requête précédente renvoie les employés dont le salaire est supérieur au salaire moyen de tous les employés.
SELECT OBJECT(e) FROM EmpBean e WHERE e.salary > ( SELECT AVG(e1.salary) FROM IN (e.dept.emps) e1 )
La requête précédente renvoie les employés dont le salaire est supérieur au salaire moyen de leur division.
SELECT OBJECT(e) FROM EmpBean e WHERE e.salary = ( SELECT MAX(e1.salary) FROM IN (e.dept.emps) e1 )
La requête précédente renvoie les employés ayant le meilleur salaire de leur division.
SELECT OBJECT(e) FROM EmpBean e WHERE e.salary > ( SELECT AVG(e.salary) FROM EmpBean e1 WHERE YEAR(e1.hireDate) = YEAR(e.hireDate) )
La requête précédente renvoie les employés dont le salaire est supérieur au salaire moyen des employés embauchés la même année qu'eux.