Joindre des Tables et des Requêtes

Lorsque vous incluez plusieurs sources de données dans une requête Access, vous utilisez des jointures pour limiter les enregistrements que vous souhaitez afficher en fonction de la façon dont les sources de données sont liées les unes aux autres. Vous utilisez également des jointures pour combiner les enregistrements à partir des deux sources de données, de telle sorte que chaque paire d’enregistrements des sources prenne la forme d’un enregistrement dans les résultats de la requête.

Cet article aborde les différents types de jointures et explique comment les utiliser dans une requête. Par défaut, une jointure est automatiquement créée s’il existe déjà une relation entre deux sources de données que vous utilisez dans une requête. Une jointure est également créée si des champs qui correspondent entre eux. Vous pouvez supprimer une jointure créée automatiquement. Cet article fournit des informations de base sur les relations entre les tables, y compris comment en créer un.

Remarque : Vous pouvez joindre des requêtes de la même manière que vous joignez des tables et les deux.

Vue d’ensemble

Une base de données est une collection de tables de données qui portent des relations logiques entre elles. Les relations vous permettent de lier les tables par champs qu’ils ont en commun. Un tableau peut faire partie d’une relation quelconque, mais chaque relation comporte toujours deux tables exactement. Dans une requête, une relation est représentée par une jointure.

Lorsque vous ajoutez des tables à une requête, Access crée des jointures basées sur des relations qui ont été définies entre les tables. Vous pouvez créer manuellement des jointures dans les requêtes, même si elles ne représentent aucune relation déjà définie. Si vous utilisez d’autres requêtes (au lieu de ou en plus de tables) en tant que sources de données pour une requête, vous pouvez créer des jointures entre les requêtes sources et également entre celles-ci et les tables que vous utilisez en tant que sources de données.

Les jointures se comportent de la même manière que les critères d’interrogation dans lesquels les données doivent correspondre pour être incluses dans les opérations de requête. Contrairement aux critères, les jointures indiquent également que chaque paire de lignes qui répond aux conditions de jointure sera combinée dans le jeu d’enregistrements pour former une seule ligne.

Il existe quatre types de jointure de base: les jointures internes, les jointures externes, les jointures croisées et les jointures inégales. Cet article étudie chaque type de jointure que vous pouvez utiliser, la raison pour laquelle vous utilisez chaque type et comment créer les jointures.

Les jointures permettent de déterminer les relations entre les tables: une indication de la façon dont les données de deux sources peuvent être combinées en fonction de valeurs de données communes. Voici une illustration d’une jointure en mode création de requête, avec les propriétés de la jointure ouvertes dans une boîte de dialogue:

Boîte de dialogue Propriétés de la jointure.

Ce trait entre les tables représente la jointure. Double-cliquez sur une jointure pour ouvrir la boîte de dialogue Propriétés de la jointure (illustrée), puis révisez ou modifiez la jointure.

Les jointures sont parfois directionnelles. Cette zone de la boîte de dialogue montre quelle table est dans la jointure et quels champs sont utilisés pour joindre les tables.

Cette zone détermine le type de jointure: l’option 1 est une jointure interne, 2 une jointure externe gauche et 3 une jointure externe droite.

Les champs des deux tables peuvent être utilisés et les données relatives à une tâche donnée sont affichées à partir de chacune d’elles. Dans une jointure interne, aucune autre donnée n’est incluse. Dans une jointure externe, les enregistrements non liés d’une table sont également inclus dans les résultats de la requête.

Types de jointures

Il existe quatre types de jointure de base: les jointures internes, les jointures externes, les jointures croisées et les jointures inégales. Les jointures croisées et les jointures inégales sont des types de jointure avancés qui sont rarement utilisés, mais vous devez en savoir plus sur le fonctionnement des jointures.

Jointures internes: seules les données associées des deux tables sont combinées

Dans le cas d’une jointure interne, Access inclut uniquement les données d’une table s’il existe des données correspondantes dans la table associée, et inversement. La plupart du temps, vous utiliserez des jointures internes. Lorsque vous créez une jointure et que vous ne spécifiez pas le type de jointure, Access suppose qu’il vous faut une jointure interne. Les jointures internes sont utiles, car elles permettent de combiner les données de deux sources en fonction de valeurs partagées, afin que vous ne voyiez que les données d’une image complète.

Jointures externes: toutes les données associées combinées correctement, ainsi que tous les enregistrements restants d’une table

Une jointure externe est comme une jointure interne, mais ajoute les lignes restantes de l’une des tables. Les jointures externes sont directionnelles: une jointure externe gauche inclut tous les enregistrements de la table de gauche: la première table de la jointure, et une jointure externe droite inclut tous les enregistrements de la table de droite (deuxième table de la jointure).

Jointures externes complètes: toutes les données, combinées quand cela est possible

Dans certains systèmes, une jointure externe peut inclure toutes les lignes des deux tables, avec des lignes combinées lorsqu’elles correspondent. Il s’agit d’une jointure externe complète, et Access ne la prend pas en charge de manière explicite. Toutefois, vous pouvez utiliser une jointure croisée et des critères pour obtenir le même effet.

Jointures croisées: toutes les données, combinées de toutes les façons possibles

Le plus souvent, une jointure croisée est un effet secondaire de l’ajout de deux tables à une requête, puis de l’oubli de leur participation. Access interprète cette fonction de façon à ce que vous souhaitiez voir chaque enregistrement d’une table combinée à chaque enregistrement de l’autre table (chaque combinaison possible d’enregistrements). Comme aucune donnée ne peut être combinée, ce type de jointure génère rarement des résultats utiles. Néanmoins, il existe quelques cas où un cross Join correspond exactement à ce dont vous avez besoin.

Jointures inégales: identique à la jointure régulière, mais en utilisant une autre comparaison pour combiner les lignes

Jointures inégales utilisez un opérateur autre que le signe égal (=) pour comparer des valeurs et déterminez si et comment combiner les données. Les jointures inégales ne sont pas explicitement prises en charge, mais vous pouvez utiliser une jointure croisée et des critères pour obtenir le même effet.

Afficher les lignes dans lesquelles existe une valeur commune dans les deux tables jointes

Si vous voulez afficher uniquement les lignes contenant des valeurs correspondantes dans le champ joint, vous devez utiliser une jointure interne. Access crée automatiquement des jointures internes.

Les jointures internes sont les plus courantes. Ils indiquent à une requête que les lignes d’une des tables jointes correspondent aux lignes de l’autre table, sur la base des données dans les champs joints. Lors de l’exécution d’une requête avec une jointure interne, seules les lignes pour lesquelles existe une valeur commune dans les deux tables jointes sont incluses dans les opérations de requête.

Comment utiliser une jointure interne?

Le plus souvent, vous n’avez rien à faire pour utiliser une jointure interne. Si les tables que vous ajoutez à une requête possèdent déjà une relation, Access crée automatiquement une jointure interne entre chaque paire de tables liées lorsque vous ajoutez les tables. Si l’intégrité référentielle est appliquée, Access affiche également 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 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 possèdent chacune un champ avec le même type de données compatible et que l’un des champs de jointure est une clé primaire. Les symboles «un» et «plusieurs» n’apparaissent pas dans ce cas, car l’intégrité référentielle n’est pas appliquée.

Si vous ajoutez des requêtes à votre requête et que vous n’avez pas créé de relations entre celles-ci, Access ne crée pas automatiquement de jointures internes entre ces requêtes ou entre les requêtes et les tables. En règle générale, vous devez les créer vous-même. Pour créer une jointure interne, faites glisser un champ d’une source de données vers un champ d’une autre source de données. Access affiche une ligne entre les deux champs pour indiquer qu’une jointure a été créée.

Syntaxe 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.Field1 comparer table2.field2

L’opération INNER JOIN (jointure interne ) comprend les parties suivantes :

Partie Description
table1table2 Nom des tables dont les enregistrements sont combinés.
champ1champ2 Noms des champs joints. S’ils ne sont pas numériques, les champs doivent avoir le même type de données et contenir des données de nature identique, mais leurs noms peuvent être différents.
comparaison Tout opérateur de comparaison relationnel tel que : “=,” “<,” “>,” “<=,” “>=,” ou “<>.”

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

Afficher toutes les lignes d’une table et les lignes correspondantes de l’autre table

Les jointures externes indiquent qu’une requête, même si certaines des 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 de l’autre table qui partagent une valeur commune sur les deux côtés de la jointure.

Les jointures externes peuvent être des jointures externes gauches ou peuvent être des jointures externes droites. Dans une jointure externe gauche, la requête inclut toutes les lignes de la première table de la clause SQL FROM et seules les lignes de la table Other pour lesquelles les valeurs du champ de jointure contiennent des valeurs communes aux deux tables. Dans le cas d’une jointure externe droite, la requête inclut toutes les lignes de la deuxième table de la clause SQL FROM et seules les lignes de la table Other pour lesquelles les valeurs du champ de jointure contiennent des valeurs communes aux deux tables.

Remarque : Vous pouvez facilement identifier la table de gauche ou de droite d’une jointure en double-cliquant sur celle-ci, puis en recherchant dans la boîte de dialogue Propriétés de la jointure . Vous pouvez également basculer vers le mode SQL, puis examiner la clause FROM.

Dans la mesure où certaines lignes d’un côté d’une jointure externe n’ont pas de lignes correspondantes de l’autre table, certains champs renvoyés dans les résultats de la requête à partir de cette table seront vides lorsque les lignes ne correspondent pas.

Comment utiliser une jointure externe?

Pour créer une jointure externe, vous devez modifier une jointure interne existante. S’il n’existe aucune jointure interne, créez-en une, puis modifiez-la en jointure externe.

Changer une jointure interne en jointure externe

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

    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 qui pointe vers l’emplacement de la source de données, où toutes les lignes doivent être incluses dans la source de données dans laquelle seules les lignes qui répondent à la condition de jointure seront incluses.

Jointures externes ambiguës

Si vous créez une requête qui contient une jointure gauche et une jointure interne, Access n’est peut-être pas en mesure de déterminer quelle opération de jointure effectuer en premier. Dans la mesure où les résultats diffèrent selon que le résultat de la jointure gauche ou de la jointure interne est appliqué en premier, Access affiche un message d’erreur:

Pour corriger cette erreur, vous devez modifier la requête de sorte qu’elle détermine clairement quelle jointure effectuer en premier.

Syntaxe 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] Rejoignez table2
sur table1. Field1 Comparez table2. champ2

Les opérations LEFT JOIN (jointure gauche) et RIGHT JOIN (jointure droite) comprennent les parties suivantes :

Partie Description
table1table2 Nom des tables dont les enregistrements sont combinés.
champ1champ2 Noms des champs joints. Les champs doivent avoir le même type de données et contenir des données de nature identique, mais leurs noms doivent être différents.
comparaison 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.

Afficher toutes les lignes des deux tables et les joindre là où existe une valeur commune

Lorsque vous voulez afficher toutes les lignes de deux tables et les joindre en fonction de valeurs communes, vous devez utiliser une jointure externe complète. Access ne prend pas en charge de manière explicite les jointures externes entières, mais vous pouvez obtenir le même effet à l’aide d’une requête Union. La procédure suivante vous explique comment procéder, mais si vous souhaitez obtenir plus d’informations sur les requêtes Union, voir la section Voir aussi .

Pour utiliser une requête Union afin d’effectuer une jointure externe complète:

  1. Créez une requête comportant une jointure externe gauche sur le champ que vous voulez utiliser pour une jointure externe complète.
  2. Sous l’onglet Accueil, dans le groupe Affichages, cliquez sur Affichage, puis sur Mode SQL.
  3. Appuyez sur CTRL + C pour copier le code SQL.
  4. Supprimez le point-virgule à la fin de la clause FROM, puis appuyez sur entrée.
  5. Entrez UNION, puis appuyez sur Entrée.

    Remarque : N’utilisez pas le mot-clé ALL lorsque vous utilisez une requête Union pour effectuer une jointure externe complète.

  6. Appuyez sur CTRL + V pour coller le code SQL copié à l’étape 3.
  7. Dans le code collé, modifiez LEFT JOIN en Right Join.
  8. Supprimez le point-virgule à la fin de la seconde clause FROM, puis appuyez sur entrée.
  9. Ajoutez une clause WHERE indiquant que la valeur du champ de jointure est NULL dans la première table répertoriée dans la clause FROM (la table de gauche).

    Par exemple, si la clause FROM est:

    FROM Products RIGHT JOIN [Order Details] 
     ON Products.ID = [Order Details].[Product ID]

    Ajoutez la clause WHERE suivante:

    WHERE Products.ID IS NULL

  10. Tapez un point-virgule (;) à la fin de la clause WHERE pour indiquer la fin de la requête Union.
  11. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

Jointures croisées

Les jointures croisées sont différentes des jointures internes et externes, car elles ne sont pas explicitement représentées dans Access. Dans une jointure croisée, chaque ligne d’une table est associée à chaque ligne d’une autre table, ce qui donne l’appel d’un produit transversal ou d’un produit cartésien. Chaque fois que vous exécutez une requête qui comporte des tables qui ne sont pas explicitement jointes, un produit croisé est le résultat. Les jointures croisées sont généralement involontaires, mais il peut être utile de les utiliser.

Pourquoi utiliser une jointure croisée?

Si vous souhaitez examiner toutes les combinaisons de lignes possibles entre deux tables ou requêtes, utilisez une jointure croisée. Par exemple, supposons que votre entreprise ait bénéficié d’une année spectaculaire et que vous envisagez de proposer des réductions pour vos clients. Vous pouvez créer une requête qui additionne les achats de chaque client, créer une petite table ayant plusieurs pourcentages de remise possibles et combiner les deux dans une autre requête qui effectue une jointure croisée. Vous retrouvez une requête qui affiche un ensemble de remises hypothétiques pour chaque client.

Comment utiliser une jointure croisée?

Une jointure croisée est produite chaque fois que vous incluez des tables ou des requêtes dans votre requête et ne créez pas au moins une jointure explicite pour chaque table ou requête. Access combine chaque ligne de chaque table ou requête qui n’est pas explicitement jointe à une autre table ou requête sur une autre ligne dans les résultats. Envisagez le scénario de remise du paragraphe précédent. Supposez que vous avez des clients 91 et que vous souhaitez examiner cinq pourcentages de remise possibles. Votre jointure croisée produit 455 lignes (le produit de 91 et 5).

Comme vous l’imaginez, vous pouvez créer des nombres importants de lignes dans les résultats de votre requête. Par ailleurs, si vous n’avez pas vraiment besoin de combiner chaque ligne et chaque ligne, la plupart des lignes combinées qui s’affichent dans les résultats ne seront pas du principe logique. Pour finir, l’exécution des requêtes qui utilisent des jointures croisées involontaires peut prendre beaucoup de temps.

Jointure croisée accidentelle en mode Création de requête1. les champs entourés doivent être joints.

Produit croisé accidentel1. Notez le plus grand nombre d’enregistrements.

Résultat corrigé de la requête1. Notez que le nombre d’enregistrements est beaucoup plus petit.

Joindre des tables en fonction de l’inégalité des valeurs de champ

Les jointures ne doivent pas être basées sur l’ équivalence des champs joints. Une jointure peut être basée sur n’importe quel opérateur de comparaison, tel que supérieur à (>), inférieur à (<) ou n’est pas égal (<>). Les jointures qui ne sont pas basées sur une équivalence sont appelées jointures inégales.

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

Comment utiliser une jointure inégale?

Les jointures inégales ne sont pas prises en charge en mode création. Si vous souhaitez les utiliser, vous devez le faire en utilisant le mode SQL. Néanmoins, vous pouvez créer une jointure en mode création, basculer vers le mode SQL, Rechercher l’opérateur de comparaison égal (=), puis le remplacer par l’opérateur que vous voulez utiliser. Lorsque vous procédez ainsi, vous pouvez rouvrir la requête en mode création, si vous changez d’abord l’opérateur de comparaison (=) en mode SQL.

Supprimer une jointure

Si Access crée automatiquement une jointure que vous ne souhaitez pas ou si vous créez une jointure par erreur (par exemple, une jointure entre deux champs qui comportent des types de données différents), vous pouvez supprimer la jointure.

  1. Dans la grille de création de la requête, cliquez sur la jointure que vous voulez supprimer.
  2. Appuyez sur Suppr.

-ou-

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