Clause FROM

La *clause FROM indique les collections d'objets auxquels l'interrogation devra s'appliquer. Chaque collection est désignée soit par un nom de schéma abstrait (ASN) soit par une expression de chemin identifiant une relation. Une variable d'identification est désignée pour chaque collection.

D'une manière conceptuelle, la sémantique de la requête consiste à former une collection temporaire de blocs de données, R, avec des éléments comportant toutes les combinaisons possibles d'objets des collections. Cette collection est soumise à des contraintes imposées par toute relation de chemin d'accès et par l'opération JOIN. L'opération JOIN peut être une jointure interne ou externe.

Les variables d'identification sont liées aux éléments du bloc de données. Une fois la collection temporaire formée, les conditions de recherche de la clause WHERE sont appliquées à R, et renvoient une nouvelle collection temporaire, R1. Les clauses ORDER BY, GROUP BY, HAVING, et SELECT sont appliquées à R1 pour renvoyer le résultat 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

Exemples : joindre des collections

DeptBean contient les enregistrements 10, 20 et 30. EmpBean contient les enregistrements 1, 2 et 3 relatifs à la division 10 et les enregistrements 4 et 5 relatifs à la division 20. La division 30 ne comporte aucun employé.

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

La syntaxe avec virgule effectue une jointure interne contenant toutes les combinaisons possibles. Dans cet exemple, R contiendrait 15 blocs de données (3 divisions x 5 employés). Lorsqu'une collection est vide, R l'est également. Le mot clé AS est facultatif.

Cet exemple démontre qu'une collection peut être jointe avec elle-même.
SELECT d FROM DeptBean AS d, DeptBean AS d1
R contiendrait 9 blocs de données (3 divisions x 3 employés).

Exemples : jointures de relations

Une collection peut être une relation basée sur un identifiant déclaré au préalable, comme dans
SELECT e FROM DeptBean AS d , IN (d.emps) AS e
R comporterait 5 blocs de données. La division 30 n'apparaîtrait pas dans R car elle ne contient aucun employé. La division 10 apparaîtrait dans 3 blocs de données et la division 20, dans 2. IN ne peut faire référence qu'à des relations multiforme. Ce qui suit n'est pas valide
SELECT m FROM EmpBean e,  IN( e.dept.mgr) as m   INVALID 
Lors d'une jointure avec une relation, la syntaxe secondaire INNER JOIN (le mot clé INNER est facultatif) peut également être utilisée, comme suit.
SELECT e FROM DeptBean AS d INNER JOIN d.emps AS e 
Une déclaration ASN (d dans la requête précédente) peut être suivie d'une ou de plusieurs clauses de jointure. La relation suivant le mot clé JOIN doit être liée (directement ou indirectement) à la déclaration ASN. Contrairement à la clause IN, les relations utilisées dans une clause de jointure peuvent être mono ou multiforme. Cette requête présente la même syntaxe que la requête
SELECT e FROM DeptBean AS d , IN (d.emps) AS e
Vous pouvez utiliser plusieurs jointures simultanément.
SELECT m FROM EmpBean e JOIN e.dept d JOIN d.mgr m
Cela équivaut à
SELECT m FROM EmpBean e JOIN e.dept.mgr m

Exemples : OUTER JOIN (jointure externe)

Une jointure externe génère une collection temporaire qui contient des combinaisons des opérandes left et right, soumises aux contraintes de relation de telle sorte que l'opérande de gauche apparaît dans R. Dans l'exemple, une jointure externe génère une collection temporaire R qui contient la division 30, même si la collection d.emps est vide. Le bloc de données contient la division 30 ainsi qu'une valeur NULL. Les références à e dans la requête renvoient une valeur NULL.
SELECT e FROM DeptBean AS d LEFT OUTER JOIN d.emps AS e
Le mot clé OUTER est facultatif, comme le montre l'exemple suivant.
SELECT e FROM DeptBean AS d LEFT JOIN d.emps AS e
Vous pouvez également utiliser des combinaisons de INNER et OUTER JOIN.
SELECT m FROM EmpBean e JOIN e.dept d LEFT JOIN d.mgr m

Icône indiquant le type de rubrique Rubrique de concept



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cque_from
Nom du fichier : cque_from.html