FROM 文節は、 照会が適用される、オブジェクトのコレクションを指定します。 各コレクションは、抽象スキーマ名 (ASN) または関係を識別するパス式のいずれかによって指定され ます。 識別変数は、コレクションごとに定義されます。
概念的には、照会のセマンティクスは、タプルの一時コレクション R を形成し、コレクションのエレメン トはコレクションからのオブジェクトの考えられるすべての組み合わせで構成されています。 このコレクションは、パスの関係と JOIN 操作による制約の影響を受けます。 JOIN は、内部 または外部 結合のいずれかです。
識別変数は、タプルのエレメントにバインドされます。 一時コレクションを形成後、WHERE 文節の検索条件が R に適用され、 新たに一時コレクション R1 が形成されます。 最終結果を得るために、ORDER BY、GROUP BY、HAVING、および SELECT 文節が R1 に適用されます。
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
DeptBean には、レコード 10、20、および 30 が含まれています。 EmpBean には、部門 10 に関係のあるレコード 1、2、および 3 と、 部門 20 に関係のあるレコード 4 および 5 が含まれています。 部門 30 には従業員はいません。
SELECT d FROM DeptBean AS d, EmpBean AS e WHERE d.name = e.nameコンマ構文は、内部結合を実行し、その結果、考えられるすべての組み合わせができます。 この例では、R は 15 のタプル (3 つの部門 x 5 人の従業員) で構成されています。 コレクションが空の場合は R も空です。 キーワード AS はオプションです。
SELECT d FROM DeptBean AS d, DeptBean AS d1R は、9 つのタプル (3 つの部門 x 3 つの部門) で構成されています。
SELECT e FROM DeptBean AS d , IN (d.emps) AS eR には 5 つのタプルが含まれます。 部門 30 は、従業員がいないため、R には表示されません。 部門 10 は 3 つのタプルで表示され、部門 20 は 2 つのタプルで表示されます。 IN は、多値の関係のみを参照できます。 以下は無効です。
SELECT m FROM EmpBean e, IN( e.dept.mgr) as m INVALID
SELECT e FROM DeptBean AS d INNER JOIN d.emps AS eASN 宣言 (前述の照会では d) の後に 1 つ以上の JOIN 文節を続けることができます。 JOIN キーワードの後に続く関係は、ASN 宣言に (直接または間接的に) 関連している必要がありま す。 IN 文節の場合とは異なり、JOIN 文節で使用される関係は、単一値でも多値でもかまいません。 この照会のセマンティクスは、次の照会の場合と同じです。
SELECT e FROM DeptBean AS d , IN (d.emps) AS e
SELECT m FROM EmpBean e JOIN e.dept d JOIN d.mgr mこれは、以下と同等です。
SELECT m FROM EmpBean e JOIN e.dept.mgr m
SELECT e FROM DeptBean AS d LEFT OUTER JOIN d.emps AS e
SELECT e FROM DeptBean AS d LEFT JOIN d.emps AS e
SELECT m FROM EmpBean e JOIN e.dept d LEFT JOIN d.mgr m