FROM 절
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개의 부서)로 구성됩니다.예제: 관계 결합
콜렉션은 다음에서와 같이 이전에 선언된 ID를 기초로 한
관계가 될 수 있습니다.
SELECT e FROM DeptBean AS d , IN (d.emps) AS eR은
5개의 튜플을 포함합니다. 부서 30은 사원을 포함하지 않으므로 R에 표시되지 않습니다. 부서 10은 3개의 튜플에 표시되고 부서 20은 두 개의 튜플에 표시됩니다. IN은 다치(multi-valued) 관계만 참조할 수 있습니다. 다음은
유효하지 않습니다.SELECT m FROM EmpBean e, IN( e.dept.mgr) as m INVALID 관계와
결합할 때 대체 구문 INNER JOIN(키워드 INNER는 선택사항임)도 다음과 같이 사용할 수 있습니다.
SELECT e FROM DeptBean AS d INNER JOIN d.emps AS e ASN 선언(이전 조회에서 d) 다음에는
하나 이상의 결합 절이 올 수 있습니다. JOIN 키워드 다음에 오는 관계는 ASN 선언과 (직접 또는 간접적으로)
관련되어야 합니다. IN 절의 경우와 달리, 결합절에서 사용된 관계는
단치(single-valued) 또는 다치(multi-valued) 관계가 될 수 있습니다. 이 조회는 다음 조회와 동일한 시멘틱을 갖습니다.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예제: OUTER JOIN
OUTER JOIN은 다음의 조합을 포함하는 임시 컬렉션을 생성합니다. 왼쪽 그리고 오른쪽 피연산자는 관계 제약 조건을 따르며 왼쪽 피연산자는 항상 R에 나타납니다. 예제에서, 외부 결합은 콜렉션
d.emps가 비어 있어도 부서 30을 포함하는 임시 콜렉션 R을 생성합니다. 튜플에는 NULL 값과 함께 부서 30이 포함됩니다. 조회에서 e를 참조하면
널값이 산출됩니다.
SELECT e FROM DeptBean AS d LEFT OUTER JOIN d.emps AS e
키워드 OUTER는
표시된 대로 선택사항입니다.
SELECT e FROM DeptBean AS d LEFT JOIN d.emps AS eINNER 및
OUTER JOIN 조합을 사용할 수도 있습니다.
SELECT m FROM EmpBean e JOIN e.dept d LEFT JOIN d.mgr m