• Aucun résultat trouvé

CREATION D’UNE JOINTURE ENTRE DEUX TABLES

INDICATIONS PRELIMINAIRES

7. CREATION D’UNE JOINTURE ENTRE DEUX TABLES

Une requête permet de sélectionner des enregistrements « composites », composés de données issues de plusieurs tables.

Exemple

On souhaite créer une requête pour afficher les tableaux peints par Géricault (ceux qui sont présents dans la table TABLEAU).

La requête affichera le nom du peintre, son prénom, ainsi que les noms des tableaux et leur date de réalisation.

Access ne peut connaître les noms des tableaux réalisés par Géricault que par l’intermédiaire de la valeur de NoPeintre, nom des champs correspondants des deux tables

PEINTRE et TABLEAU.

Pour cela, il utilisera la jointure entre les deux tables, jointure qui s’appuie sur les champs NoPeintre.

Concernant une requête, il ne s’agit pas de « relation », mais de « jointure ».

Comme une relation, une jointure relie deux champs analogues (généralement une clé primaire et la clé étrangère correspondante).

Création automatique de jointures

Pour qu’il ait création automatique de jointures, l’option Access « Activez les jointures automatiques » doit être activée. Vérifiez-le :

Ouvrez le menu Fichier > Options. Sélectionnez la rubrique « Concepteurs d’objets ». Sous le titre

« Création de requête », vérifiez que la case « Activez les jointures automatiques » est bien cochée. Sinon, cochez-la.

Une jointure est automatiquement créée par Access dans les cas suivants : - Une relation existe entre les deux tables.

- Les deux tables comportent deux noms de champs identiques, dont l’un est clé primaire.

Les champs seront « joints », même en l’absence de relation entre les tables. En affichant les deux tables, on peut voir une ligne reliant les deux champs analogues. Elle représente la jointure entre les tables.

Contrairement à la relation qui revêt un caractère permanent (bien qu’elle puisse être supprimée), une jointure est propre à une requête, elle n’existe que le temps de la requête.

Si on affiche dans la fenêtre « Relations » deux tables jointes dans la fenêtre de la création de requête, mais qui n’ont pas été reliées (création d’une relation entre elles), elles demeurent non reliées.

Exemple

On souhaite créer une requête pour afficher les noms de musées où sont affichés les tableaux peints par Van Eyck (ceux qui sont présents dans la table TABLEAU).

La requête affichera le nom du peintre, les noms des tableaux et les noms des musées où ceux-ci sont exposés.

La réponse à cette requête nécessite que les trois tables PEINTRE, TABLEAU et MUSEE

soient en jointure deux à deux : il y a sélection des enregistrements de même valeur NoPeintre pour les deux premières tables, et sélection des enregistrements de même valeur NoMusee pour les deux dernières.

Réalisez la requête. Affichez les trois tables. Sélectionnez les champs NomPeintre, NomTab et NomMusee. Sur une ligne de définition des critères du champ NomPeintre, tapez

=Van Eyck. Exécutez la requête.

On obtient le résultat :

NomPeintre NomTab NomMusee

Van Eyck La Vierge au chancelier Louvre

Van Eyck Les Epoux Arnolfini National Gallery

Le nombre de jointures créées est toujours égal au nombre de tables utilisées, moins un.

Dans l’exemple précédent, on a trois tables, donc deux jointures.

Pour afficher la fenêtre « Propriétés de la jointure », double-cliquez sur une ligne de jointure. Sont proposés trois types de jointure. On utilise essentiellement le premier type.

Quand on parle de « jointure », on sous-entend une jointure interne.

Jointure interne

La fenêtre « Propriétés de la jointure » explique la jointure interne :

1 : « Inclure seulement les lignes des deux tables pour lesquelles les champs joints sont égaux ».

Il s’agit du type le plus commun. Les enregistrements comportant des données de deux tables, on ne garde que ceux dont les champs correspondants ont des valeurs identiques.

C’est ce type de jointure qui est appliqué dans les deux requêtes précédentes. Prenons un autre exemple.

Exemple

Créons la requête sélectionnant les peintres ayant réalisé un tableau après 1875. Le résultat affichera les noms des peintres, ainsi que les noms et les dates des tableaux.

Affichez la table PEINTRE à gauche et la table TABLEAU à droite.

Double-cliquez sur la ligne de relation qui les rattache. La fenêtre « Propriétés de la jointure » montre que les deux tables sont jointes, par l’intermédiaire des champs correspondants NoPeintre.

Laissez cochée l’option 1 de jointure, qui est l’option de jointure interne. Validez.

Sélectionnez les champs NoPeintre, NomPeintre, NomTab et DateTab.

Dans la ligne « Afficher », décochez la case de la colonne du champ NoPeintre (on ne souhaite pas afficher les numéros des peintres).

Sur une ligne de définition de critères du champ DateTab, tapez >1875. Exécutez la requête. On obtient le résultat :

NomPeintre NomTab DateTab

Renoir Chemin montant (…) 1877

Van Gogh La Chambre de Van Gogh (…) 1889

Van Gogh L'Eglise d'Auvers-sur-Oise 1890

Picasso Guernica 1937

En code SQL, la requête s’écrit :

select PEINTRE.NomPeintre, TABLEAU.NomTab, TABLEAU.DateTab

from PEINTRE inner join TABLEAU on PEINTRE.NoPeintre=TABLEAU.NoPeintre;

« inner join » désigne la jointure interne.

Jointure externe gauche et Jointure externe droite

Ces deux jointures ont des effets analogues. La jointure externe gauche (droite) garde chaque enregistrement de la table située à gauche (à droite), même s’il n’y a pas de valeur de champ joint identique dans l’autre table, en plus des enregistrements pour lesquels les champs joints sont égaux.

Prenons l’exemple de la jointure externe gauche.

La fenêtre « Propriétés de la jointure » l’explique ainsi :

2 : « Inclure tous les enregistrements de (la table à gauche)

et seulement ceux de (la table à droite) pour lesquels les champs joints sont égaux ».

Exemple

Reprenons l’exemple précédent. Affichez la fenêtre « Propriétés » en double-cliquant sur la jointure des tables PEINTRE et TABLEAU.

Choisissez le type jointure externe gauche (option 2) entre les deux tables.

Exécutez la requête.

Le résultat affiche cette fois également le peintre Klee, appartenant à la table gauche de la jointure, bien que la valeur de son champ NoPeintre (20) n’apparaisse pas dans la table

TABLEAU.

En code SQL, la requête s’écrit :

select PEINTRE.NomPeintre, TABLEAU.NomTab, TABLEAU.DateTab

from PEINTRE left join TABLEAU on PEINTRE.NoPeintre=TABLEAU.NoPeintre;

« left join » désigne la jointure externe gauche.