5.4 Extraction de données de plusieurs tables (jointure)
91
© Dunod – La photocopie non autorisée est un délit.
la requête principale ne retient que les commandes pour lesquelles cet ensemble est
vide.
Examinons deux variantes équivalentes. La première se déduit de l’observation
que les valeurs de NCOM qui nous intéressent sont toutes présentes dans la table
DETAIL. On peut donc réécrire la requête sous la forme :
select NCOM
from
DETAIL M
....
La seconde exploite la propriété qui veut que si l’ensemble A est inclus dans B, et
que A et B sont de même taille, alors A = B. Considérons les lignes de DETAIL relatives à une commande. L’ensemble des valeurs de NPRO de ces lignes représente les
produits commandés. S’il contient de valeurs qu’il y a de lignes dans la table
PRODUIT, alors cette commande spécifie tous les produits. On peut alors écrire 22 :
select NCOM
from
DETAIL
group by NCOM
having count(distinct NPRO) = (select count(*) from PRODUIT)
5.4 EXTRACTION DE DONNÉES DE PLUSIEURS TABLES
(JOINTURE)
Jusqu’ici, nous avons extrait des données, brutes ou dérivées, issues d’une seule
table. Nous examinerons dans cette section comment coupler les lignes de deux ou
plusieurs tables afin d’en extraire des données corrélées.
5.4.1 La jointure de plusieurs tables
Pour coupler deux tables, il faut d’abord préciser ces tables (clause from), ainsi que
la règle d’association des lignes de ces deux tables (clause where) dont les valeurs
sont extraites (clause select). Cette règle se présente généralement sous la forme
de l’égalité des valeurs de deux colonnes. Une telle opération d’association de tables
porte le nom de jointure (en anglais join).
La requête ci-dessous extrait les informations sur les commandes, complétées
pour chacune d’elles de renseignements sur le client qui l’a émise.
select NCOM, CLIENT.NCLI, DATECOM, NOM, LOCALITE
from
COMMANDE, CLIENT
where COMMANDE.NCLI = CLIENT.NCLI
Son évaluation donnerait la table suivante.
22. Dans cet exemple, le modifieur distinct n’est pas nécessaire. Pourquoi ?
Précédent

- 91/436

Suivant