Cláusula FROM

La cláusula FROM especifica las colecciones de objetos a los que se debe aplicar la consulta. Cada colección se especifica mediante un nombre de esquema abstracto (ASN) o mediante una expresión de vía de acceso que identifique una relación. Se define una variable de identificación para cada colección.

Conceptualmente, la semántica de la consulta es para formar una colección temporal de tuplas, R, con elementos que consten de todas las combinaciones posibles de objetos procedentes de las colecciones. Esta colección está sujeta a las restricciones impuestas por cualquiera de las relaciones de vía de acceso o por la operación JOIN. La operación JOIN puede ser una operación interna o externa.

Las variables de identificación se enlazan con elementos del tuple. Después de formar la colección temporal, las condiciones de búsqueda de la cláusula WHERE se aplican a R y generan una nueva colección temporal, R1. Las cláusulas ORDER BY, GROUP BY, HAVING y SELECT se aplican a R1 para generar el resultado final.

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

Ejemplos: unión de colecciones

DeptBean contiene los registros 10, 20 y 30. EmpBean contiene los registros 1, 2 y 3 que están relacionados con el departamento 10 y los registros 4 y 5 que están relacionados con el departamento 20. El departamento 30 no tiene empleados.

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

La sintaxis de comas lleva a cabo una unión interna que de como resultado todas las combinaciones posibles. En este ejemplo, R constaría de 15 tuplas (3 departamentos x 5 empleados). Si una colección está vacía, R también está vacía. La palabra clave AS es opcional.

Este ejemplo muestra que una colección puede unirse a sí misma.
SELECT d FROM DeptBean AS d, DeptBean AS d1
R constaría de 9 tuplas (3 departamentos x 3 departamentos).

Ejemplos: uniones de relaciones

Una colección puede se una relación basada en un identificador previamente declarado como en
SELECT e FROM DeptBean AS d , IN (d.emps) AS e
R contendría 5 tuplas. El departamento 30 no aparecería en R porque no contiene empleados. El departamento 10 aparecería en 3 tuplas y el departamento 20 en 2 tuplas. IN sólo puede hacer referencia a relaciones de varios valores. La siguiente consulta no es válida
SELECT m FROM EmpBean e,  IN( e.dept.mgr) as m   INVALID 
Cuando se realiza una unión con una relación, también se puede utilizar la sintaxis alternativa INNER JOIN (la palabra clave INNER es opciones), como se muestra aquí.
SELECT e FROM DeptBean AS d INNER JOIN d.emps AS e 
Una declaración de ASN (d en la consulta anterior) puede ir seguida de una o más cláusulas JOIN. La relación que aparezca después de la palabra clave JOIN debe estar relacionada directamente o indirectamente con una declaración de ASN. A diferencia de lo que ocurre con la cláusula IN, las relaciones que se utilizan en una cláusula JOIN puede ser de un solo valor o de varios valores. Esta consulta tiene la misma semántica que la consulta
SELECT e FROM DeptBean AS d , IN (d.emps) AS e
Puede utilizar varias uniones juntas.
SELECT m FROM EmpBean e JOIN e.dept d JOIN d.mgr m
Esta consulta equivale a
SELECT m FROM EmpBean e JOIN e.dept.mgr m

Ejemplos: OUTER JOIN

Un OUTER JOIN (unión externa) da lugar a una colección temporal que contiene las combinaciones de los operandos izquierdo y derecho, sujeta a las restricciones de relación y de tal forma que el operando izquierdo aparece siempre en R. En el ejemplo, una unión externa da lugar a una colección temporal R que contiene el departamento 30, a pesar de que la colección d.emps está vacía. La tupla contiene el departamento 30 junto con el valor NULL. Las referencias a e de las consultas dan como resultado un valor nulo.
SELECT e FROM DeptBean AS d LEFT OUTER JOIN d.emps AS e
La palabra clave OUTER es opcional, como se muestra aquí.
SELECT e FROM DeptBean AS d LEFT JOIN d.emps AS e
También puede utilizar las combinaciones de INNER JOIN y OUTER JOIN.
SELECT m FROM EmpBean e JOIN e.dept d LEFT JOIN d.mgr m

Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cque_from
File name: cque_from.html