FROM-Klausel

Die FROM-Klausel gibt die Objektgruppen an, auf die die Abfrage angewendet werden soll. Jede Objektgruppe wird entweder von einem ASN (Abstract Schema Name) oder von einem Pfadausdruck, der eine Beziehung angibt, definiert. Für jede Objektgruppe wird eine Identifikationsvariable definiert.

Konzeptionell muss die Semantik der Abfrage zunächst eine temporäre Sammlung von Tupeln bilden, R, mit Elementen, die aus allen möglichen Objektkombinationen aus den Objektgruppen bestehen. Diese Objektgruppe ist den Einschränkungen unterworfen, die von allen Pfadbeziehungen und der JOIN-Operation vorgegeben werden. Das JOIN kann eine innere oder eine äußere Verknüpfung sein.

Die Identifikationsvariablen sind an Elemente des Tupel gebunden. Nach der Bildung der temporären Collection werden die Suchbedingungen der WHERE-Klausel auf R angewendet. Das ergibt eine neue temporäre Collection R1. Die Klauseln ORDER BY, GROUP BY, HAVING und SELECT werden auf R1 angewendet und liefern das endgültige Ergebnis.

from_clause::=FROM identification_variable_declaration [, {identification_variable_declaration |
collection_member_declaration } ]*

identification_variable_declaration::= range_variable_declaration [join]*

join :=  [ { LEFT [OUTER] | INNER  }]  JOIN  {collection_valued_path_expression | single_valued_path_expression} [AS] identifier

Beispiele: Collections verknüpfen

DeptBean enthält die Datensätze 10, 20 und 30. EmpBean enthält die Datensätze 1, 2 und 3, die der Abteilung (Department) 10 zugeordnet sind, und die Datensätze 4 und 5, die der Abteilung 20 zugeordnet sind. Abteilung 30 hat keine zugeordneten Mitarbeiter.

SELECT d FROM  DeptBean AS d, EmpBean AS e
WHERE d.name = e.name

Die Kommasyntax führt eine innere Verknüpfung durch, die zu allen möglichen Kombinationen führt. In diesem Beispiel würde R aus 15 Tupeln bestehen (3 Abteilungen x 5 Mitarbeiter). Wenn eine Collection leer ist, dann ist R ebenfalls leer. Das Schlüsselwort AS ist optional.

Dieses Beispiel zeigt, dass eine Collection mit sich selbst verknüpft werden kann.
SELECT d FROM DeptBean AS d, DeptBean AS d1
R würde aus 9 Tupeln bestehen (3 Abteilungen x 3 Abteilungen).

Beispiele: Beziehungsverknüpfungen

Eine Collection kann eine Beziehung sein, die auf einer zuvor deklarierten ID basiert wie in
SELECT e FROM DeptBean AS d , IN (d.emps) AS e
R würde 5 Tupel enthalten. Abteilung 30 würde nicht in R erscheinen, da sie keine Mitarbeiter enthält. Abteilung 10 würde in 3 Tupeln und Abteilung 20 in 2 Tupeln erscheinen. IN kann sich nur auf Beziehungen mit mehreren Werten beziehen. Der folgende Ausdruck ist nicht gültig:
SELECT m FROM EmpBean e,  IN( e.dept.mgr) as m   INVALID 
Wenn Sie eine Verknüpfung mit einer Beziehung durchführen, kann auch die alternative Syntax INNER JOIN (Schlüsselwort INNER ist optional) verwendet werden, wie hier gezeigt.
SELECT e FROM DeptBean AS d INNER JOIN d.emps AS e 
Auf eine ASN-Deklaration ("d" in der obigen Abfrage) können ein oder mehrere JOIN-Klauseln folgen. Die Beziehung, die auf das Schlüsselwort JOIN folgt, muss sich direkt oder indirekt auf die ASN-Deklaration beziehen. Im Gegensatz zu dem Fall mit der IN-Klausel können Beziehungen in einer JOIN-Klausel einen oder mehrere Werte haben. Diese Abfrage hat dieselbe Semantik wie die Abfrage
SELECT e FROM DeptBean AS d , IN (d.emps) AS e
Sie können mehrere Verknüpfungen zusammen verwenden.
SELECT m FROM EmpBean e JOIN e.dept d JOIN d.mgr m
Das ist äquivalent zu
SELECT m FROM EmpBean e JOIN e.dept.mgr m

Beispiele: OUTER JOIN

Ein OUTER JOIN ergibt eine temporäre Collection, die Kombinationen der linken und rechten Operanden enthält. Diese sind den Einschränkungen für Beziehungen und der Vorgabe, dass der linke Operand immer in R erscheint, unterworfen. Im Beispiel führt eine äußere Verknüpfung zu einer temporären Collection R, die Abteilung 30 enthält, obwohl die Collection d.emps leer ist. Das Tupel enthält Abteilung 30 und einen NULL-Wert. Verweise auf e in der Abfrage ergibt einen Nullwert.
SELECT e FROM DeptBean AS d LEFT OUTER JOIN d.emps AS e
Das Schlüsselwort OUTER ist optional, wie hier dargestellt.
SELECT e FROM DeptBean AS d LEFT JOIN d.emps AS e
Sie können auch Kombinationen von INNER und OUTER JOIN verwenden.
SELECT m FROM EmpBean e JOIN e.dept d LEFT JOIN d.mgr m

Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cque_from
Dateiname:cque_from.html