5.4 Extraction de données de plusieurs tables (jointure)
93
© Dunod – La photocopie non autorisée est un délit.
ciations entre les lignes de COMMANDE et de CLIENT. On observera d’ailleurs que
dans cette condition de jointure, COMMANDE.NCLI correspond à une clé étrangère et
CLIENT.NCLI à un identifiant primaire.
Techniquement, cependant, il s’agit d’une condition ordinaire appliquée aux
colonnes de chaque couple de lignes, et qui peut apparaître au milieu d’autres conditions de sélection, comme dans la requête suivante, qui limite le résultat aux clients
de catégorie C1 et aux commandes antérieures au 23 décembre 2005.
select NCOM, CLIENT.NCLI, DATECOM, NOM, ADRESSE
from
COMMANDE, CLIENT
where COMMANDE.NCLI = CLIENT.NCLI
and
CAT = 'C1'
and
DATECOM < '23-12-2005'
5.4.3 Jointures sans conditions : produit relationnel
Une jointure sans condition de jointure telle que la suivante n’est pas interdite :
select NCOM, CLIENT.NCLI, DATECOM, NOM, ADRESSE
from
COMMANDE, CLIENT
Elle risque cependant d’être extrêmement coûteuse (le résultat contiendrait ici 16 ×
7 = 112 lignes) et n’offrirait aucun intérêt. Sauf justification, il faudra la considérer
comme une erreur. Cette opération porte le nom de produit relationnel.
5.4.4 La jointure et les lignes célibataires - Les opérateurs ensemblistes
a) Les lignes célibataires
Assez logiquement, les clients qui n’ont passé aucune commande n’apparaissent pas
dans le résultat. Nous qualifierons de célibataires les lignes qui leur correspondent.
En toute généralité, la jointure de deux tables exclut dans chacune d’elle les lignes
célibataires, c’est à dire les lignes qui n’ont pas de correspondants dans l’autre table.
Dans le cas qui nous occupe, il existe des clients célibataires, mais en revanche il
n’y a pas de commandes célibataires (en effet la clé étrangère est une colonne obligatoire, de sorte qu’il n’y a pas de commande sans client). Il existe une variante de
l’opérateur de jointure, dénommée jointure externe, qui permet d’inclure les lignes
célibataires. Nous en reparlerons plus loin (outer join, section 6.3.2).
b) L’union
Si nous désirons réintégrer les clients sans commandes dans la jointure, nous
pouvons faire appel à l’opérateur union, qui permet d’ajouter au résultat d’une
requête celui d’une autre requête. La requête évoquée pourrait s’écrire comme suit :
select NCOM, CLIENT.NCLI, DATECOM, NOM, LOCALITE
from
COMMANDE, CLIENT
where COMMANDE.NCLI = CLIENT.NCLI
union
select '--', NCLI, '--', NOM, LOCALITE
Précédent

- 93/436

Suivant