Unterabfragen
Eine Unterabfrage kann in den Prädikaten EXISTS oder IN verwendet werden. Bei einer Unterabfrage sollte in der SELECT-Klausel nur ein Element angegeben werden.
Wenn in einer Unterabfrage ein Pfadausdruck vorkommt, muss die Identifikationsvariable des Pfadausdrucks entweder in der Unterabfrage, in einer der enthaltenen Unterabfragen oder in der äußeren Abfrage definiert sein. Eine skalare Unterabfrage ist eine Unterabfrage, die einen einzigen Wert zurückgibt. Eine skalare Unterabfrage kann im Prädikat BASIC oder in der SELECT-Klausel einer dynamischen Abfrage verwendet werden.
Beispiel: Unterabfragen
SELECT OBJECT(e) FROM EmpBean e WHERE e.salary > ( SELECT AVG(e1.salary) FROM EmpBean e1)
Diese Abfrage gibt Mitarbeiter zurück, die mehr als das Durchschnittsgehalt aller Mitarbeiter verdienen.
SELECT OBJECT(e) FROM EmpBean e WHERE e.salary > ( SELECT AVG(e1.salary) FROM IN (e.dept.emps) e1 )
Diese Abfrage gibt Mitarbeiter zurück, die mehr als das Durchschnittsgehalt ihrer Abteilung verdienen.
SELECT OBJECT(e) FROM EmpBean e WHERE e.salary = ( SELECT MAX(e1.salary) FROM IN (e.dept.emps) e1 )
Diese Abfrage gibt Mitarbeiter zurück, die in ihrer Abteilung am meisten verdienen.
SELECT OBJECT(e) FROM EmpBean e WHERE e.salary > ( SELECT AVG(e.salary) FROM EmpBean e1 WHERE YEAR(e1.hireDate) = YEAR(e.hireDate) )
Diese Abfrage gibt Mitarbeiter zurück, die mehr als das Durchschnittsgehalt der im selben Jahr eingestellten Mitarbeiter verdienen.