Microsoft Office Online
Se connecter à Mon site Office Online (Qu'est-ce que c'est ?) | Se connecter

 
 
Microsoft Office Access
Rechercher
Rechercher
 
Acheter Office
Acheter et activer Office
 
 
 
Avertissement : vous affichez cette page avec un navigateur Web non pris en charge. Ce site Web fonctionne de manière optimale avec Microsoft Internet Explorer 6.0 ou version ultérieure, Firefox 1.5 ou Netscape Navigator 8.0 ou version ultérieure. En savoir plus sur les navigateurs pris en charge.

Joindre des tables et des requêtes
 

Lorsque vous incluez plusieurs tables dans une requête, vous devez utiliser des jointures pour obtenir les résultats que vous recherchez. Grâce aux jointures, la requête ne renvoie que les enregistrements appropriés de chaque table, en fonction de la relation existant entre les tables dans la requête. Cet article contient des informations conceptuelles sur les jointures, décrit les différents types de jointures et indique comment les utiliser.

Dans cet article


Introduction

Les bases de données relationnelles sont constituées essentiellement de tables reliées entre elles dans une configuration de relations logiques. Les relations servent à connecter des tables à partir des champs qu'elles ont en commun. Une relation est représentée dans une requête par une jointure.

Lorsque vous ajoutez des tables à une requête, Microsoft Office Access 2007 crée des jointures qui reposent sur les relations définies entre les tables. Vous pouvez créer manuellement des jointures dans les requêtes, même si elles ne représentent pas les relations qui ont déjà été définies. Si vous utilisez d'autres requêtes (en plus des tables ou à la place de celles-ci) en tant que sources de données d'une requête, vous pouvez créer des jointures entre les requêtes source mais aussi entre ces dernières et les tables que vous utilisez comme sources de données.

Les jointures ont un comportement similaire à celui des critères d'une requête, dans la mesure où elles établissent des conditions auxquelles les données doivent répondre pour être incluses dans les opérations de la requête. En revanche, contrairement aux critères, les jointures spécifient que les paires de lignes qui répondent aux conditions qu'elles ont établies seront combinées en une seule ligne dans le jeu d'enregistrement.

Il existe principalement quatre types de jointures : les jointures internes, externes, croisées et inégales. Cet article décrit les différents types de jointures, indique dans quel cas vous pouvez les utiliser et comment créer les jointures.

Haut de la page Haut de la page

Jointures internes

Il s'agit du type de jointure le plus courant. Les jointures internes indiquent à une requête que les lignes d'une des tables jointes correspondent aux lignes de l'autre table, car les champs joints comportent les mêmes données. Lorsqu'une requête avec une jointure interne est exécutée, seules les lignes comportant une valeur qui existe dans les deux tables jointes seront incluses dans les opérations de la requête.

Dans quel cas doit-on utiliser une jointure interne ?

Utilisez une jointure interne si vous ne voulez renvoyer que les lignes des deux tables jointes qui ont la même valeur dans le champ de jointure.

Comment doit-on utiliser une jointure interne ?

En général, vous n'avez besoin d'effectuer aucune opération particulière pour utiliser une jointure interne. Si vous avez déjà créé des relations entre les tables dans la fenêtre Relations (fenêtre Relations : fenêtre dans laquelle vous affichez, créez ou modifiez des relations entre des tables et des requêtes.), Access crée automatiquement des jointures internes lorsque vous ajoutez des tables associées en mode Création (mode Création : fenêtre qui présente la création des objets de base de données suivants : tables, requêtes, formulaires, états, macros et pages d'accès aux données. En mode Création, vous pouvez créer de nouveaux objets de base de données et modifier la structure d'objets existants.) de requête. Si l'intégrité référentielle (intégrité référentielle : règles que vous suivez pour préserver les relations définies entre des tables lorsque vous entrez ou supprimez des enregistrements.) est appliquée, Access affiche un « 1 » au-dessus de la ligne de jointure pour indiquer la table qui se trouve du côté « un » d'une relation un-à-plusieurs (relation un-à-plusieurs : association entre deux tables dans laquelle la valeur de clé primaire de chaque enregistrement de la table primaire correspond à la valeur du ou des champs correspondants de plusieurs enregistrements de la table liée.) et le symbole infini () pour indiquer la table qui se trouve du côté « plusieurs ».

Même si vous n'avez pas créé de relations, Access crée automatiquement des jointures internes si vous ajoutez deux tables à une requête et que ces tables comportent au moins un champ avec un type de données identique ou compatible et enfin que l'un des champs de jointure est une clé primaire (clé primaire : un ou plusieurs champs (colonnes) dont la valeur identifie de façon unique chaque enregistrement d'une table. Une clé primaire n'accepte pas les valeurs Null et doit toujours avoir un index unique. Une clé primaire sert à relier une table à des clés étrangères se trouvant dans d'autres tables.). Les symboles « un » et « plusieurs » ne sont pas affichés dans ce cas, car l'intégrité référentielle n'est pas appliquée.

Si vous ajoutez des requêtes à votre requête alors que vous n'avez pas créé de relations entre elles, Access ne crée aucune jointure entre ces requêtes et n'en crée pas non plus entre les requêtes et les tables. Vous devez alors créer les jointures vous-même. Pour cela, il vous suffit de faire glisser un champ d'une source de données sur un champ d'une autre source de données. Access affiche une ligne entre les deux champs pour montrer qu'une jointure a été créée.

AfficherSyntaxe SQL pour une jointure interne

Les jointures internes sont spécifiées en code SQL dans la clause FROM, comme indiqué ci-dessous :

FROM table1 INNER JOIN table2 ON table1.champ1 oprcomp table2.champ2

L'opération INNER JOIN se compose des éléments suivants :

Composant Description
table1, table2 Nom des tables dont les enregistrements sont combinés.
champ1, champ2 Noms des champs joints. S'ils ne sont pas numériques, les champs doivent avoir le même type de données (type de données : caractéristique d'un champ qui détermine le type des données qu'il peut contenir. Les différents types de données sont Boolean, Integer, Long, Currency, Single, Double, Date, String et Variant (par défaut).) et contenir des données de nature identique, mais leurs noms peuvent être différents.
oprcomp Tout opérateur de comparaison relationnel tel que : « = », « < », « > », « <= », « >= » ou « <> ».

Pour plus d'informations sur la syntaxe des jointures internes, voir la rubrique INNER JOIN, opération.


Haut de la page Haut de la page

Jointures externes

Les jointures externes indiquent à une requête que bien que certaines lignes des deux côtés de la jointure correspondent exactement, la requête doit inclure toutes les lignes d'une table et les lignes qui partagent une même valeur des deux côtés de la jointure.

Les jointures externes peuvent être des jointures externes droites ou gauches. Dans une jointure externe gauche, la requête inclut toutes les lignes de la première table de la clause FROM de l'instruction SQL et seulement les lignes de l'autre table qui contiennent des valeurs communes aux deux tables dans le champ de jointure. Inversement, dans une jointure droite, la requête inclut toutes les lignes de la seconde table se la clause FROM de l'instruction SQL et seulement les lignes de l'autre table qui contiennent des valeurs communes aux deux tables dans le champ de jointure.

 Remarque   Vous pouvez aisément savoir quelle table est la table de gauche ou la table de droite dans une jointure donnée, en double-cliquant sur la jointure puis en examinant la boîte de dialogue Propriétés de la jointure. Vous pouvez également passer en vue SQL et examiner la clause FROM.

Étant donné que certaines des lignes d'une table d'un côté de la jointure externe n'auront pas de lignes correspondantes dans l'autre table, certains des champs seront vides dans les résultats de la requête.

Dans quel cas doit-on utiliser une jointure externe ?

Utilisez une jointure externe si vous voulez que toutes les lignes d'une des tables de la jointure soient incluses dans les résultats et que la requête ne prenne en compte que les lignes de l'autre table qui contiennent les mêmes valeurs que la première table dans le champ de jointure.

Comment doit-on utiliser une jointure externe ?

Des jointures externes sont créées en modifiant des jointures internes.

Changer une jointure interne en jointure externe

  1. En mode Création de requête, double-cliquez sur la jointure que vous voulez changer.

    La boîte de dialogue Propriétés de la jointure apparaît.

  2. Dans la boîte de dialogue Propriétés de la jointure, notez les choix proposés à côté de l'option 2 et de l'option 3.
  3. Cliquez sur l'option que vous voulez utiliser, puis sur OK.
  4. Access affiche la jointure et une flèche pointant de la source de données dont toutes les lignes seront incluses vers la source de données dont seulement les lignes qui répondent aux conditions de la jointure seront incluses.

AfficherSyntaxe SQL pour une jointure externe

Les jointures externes sont spécifiées en code SQL dans la clause FROM, comme indiqué ci-dessous :

FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.champ1 oprcomp table2.champ2

Les opérations LEFT JOIN et RIGHT JOIN se composent des éléments suivants :

Composant Description
table1, table2 Nom des tables dont les enregistrements sont combinés.
champ1, champ2 Noms des champs joints. Les champs doivent avoir le même type de données (type de données : caractéristique d'un champ qui détermine le type des données qu'il peut contenir. Les différents types de données sont Boolean, Integer, Long, Currency, Single, Double, Date, String et Variant (par défaut).) et contenir des données de nature identique, mais leurs noms peuvent être différents.
oprcomp Tout opérateur de comparaison relationnel tel que : « = », « < », « > », « <= », « >= » ou « <> ».

Pour plus d'informations sur la syntaxe des jointures externes, voir la rubrique LEFT JOIN, RIGHT JOIN, opérations.


Haut de la page Haut de la page

Jointures croisées

Les jointures croisées sont différentes des jointures internes et externes dans la mesure où elles ne sont pas explicitement représentées dans Office Access 2007. Dans une jointure croisée, chaque ligne d'une table est combinée à chaque ligne d'une autre table, le résultat est alors désigné comme produit croisé ou produit cartésien. À chaque fois que vous exécutez une requête comportant des tables qui ne sont pas explicitement jointes, le résultat est un produit croisé. Les jointures croisées sont en général accidentelles, mais elles peuvent être utiles dans certains cas.

Dans quel cas doit-on utiliser une jointure croisée ?

Si vous voulez examiner chaque combinaison possible de lignes entre deux tables ou deux requêtes, utilisez une jointure croisée. Supposons, par exemple, que votre société a connu une année exceptionnelle et que vous envisagez d'accorder des remises à vos clients. Créez pour cela une requête qui additionne les achats de chaque client et créez une petite table comportant plusieurs pourcentages de remise possibles, puis combinez les deux dans une autre requête qui effectue une jointure croisée. Vous obtiendrez comme résultat les remises hypothétiques pour chaque client.

Comment doit-on utiliser une jointure croisée ?

Une jointure croisée est produite à chaque fois que vous incluez des tables ou des requêtes dans une requête sans créer au moins une jointure explicite pour chaque table ou chaque requête. Access combine alors chaque ligne de chaque table ou requête, qui n'est pas explicitement jointe à une autre table ou requête, à chaque ligne des autres tables ou requêtes. À titre d'exemple, supposons que, dans le même scénario que le paragraphe précédent, vous disposez de 91 clients et que vous envisagez cinq pourcentages de remise possibles pour ces derniers. La jointure croisée produira alors 455 lignes (le produit de 91 et de 5).

Comme vous pouvez l'imaginer, les jointures croisées accidentelles peuvent créer un nombre très élevé de lignes dans les résultats de la requête. De plus, ces résultats sont en général inutiles, car, à moins que vous ne vouliez combiner chaque ligne à une autre, la plupart des lignes combinées dans les résultats n'auront aucun sens. Enfin, les requêtes qui utilisent des jointures croisées accidentelles peuvent avoir une très longue durée d'exécution.

Jointure croisée accidentelle en mode Création de requête
Jointure croisée accidentelle en mode Création de requête.

Légende 1 Les champs entourés doivent être joints.

Produit croisé accidentel
Produit croisé renvoyé par la jointure croisée accidentelle décrite précédemment.

Légende 1 Notez le nombre très important d'enregistrements.

Résultat corrigé de la requête
Résultats après que la jointure correcte a été créée.

Légende 1 Notez que le nombre d'enregistrements est bien plus petit.

Haut de la page Haut de la page

Jointures inégales

Les jointures ne doivent pas obligatoirement être basées sur l'équivalence des champs joints. Une jointure peut être basée sur un opérateur de comparaison, tel que supérieur à (>), inférieur à (<) ou différent de (<>). Les jointures qui ne sont pas basées sur une équivalence sont appelées jointures inégales.

Dans quel cas doit-on utiliser une jointure inégale ?

Si vous voulez combiner les lignes de deux sources de données qui ont des valeurs de champs différentes, utilisez une jointure non égale. En général, les jointures non égales sont basées sur les opérateurs de comparaison supérieur à (>), inférieur à (<), supérieur ou égal à (>=) ou inférieur ou égal à (<=). Les jointures inégales basées sur l'opérateur de comparaison différent de (<>) peuvent renvoyer autant de lignes que les jointures croisées et les résultats peuvent être difficiles à interpréter.

Comment doit-on utiliser une jointure inégale ?

Les jointures inégales ne sont pas prises en charge en mode Création. Si vous voulez les utiliser, vous devez recourir au mode SQL. Vous pouvez également créer une jointure en mode Création, puis basculer en mode SQL, rechercher l'opérateur de comparaison égal (=) et le remplacer par l'opérateur que vous voulez utiliser. Mais pour pouvoir ouvrir la requête en mode Création, vous devez d'abord rétablir l'opérateur de comparaison égal (=) en mode SQL.

Haut de la page Haut de la page

Supprimer une jointure

Vous pouvez supprimer une jointure créée par erreur, par exemple, une jointure entre deux champs qui ont des types de données différents. Pour supprimer la jointure, procédez comme suit :

  1. Dans la grille de création de la requête, cliquez sur la jointure à supprimer.
  2. Appuyez sur SUPPRESSION.

- ou -

  • Dans la grille de création de la requête, cliquez avec le bouton droit sur la jointure que vous voulez supprimer, puis cliquez sur Supprimer.

Haut de la page Haut de la page

publicité