Lorsque vous incluez plusieurs sources de données dans une requête Access, vous utilisez des jointures pour limiter les enregistrements que vous souhaitez voir, en fonction de la façon dont les sources de données sont liées entre elles. Vous utilisez également des jointures pour combiner les enregistrements des deux sources de données, afin que chaque paire d’enregistrements des sources devienne un enregistrement dans les résultats de la requête.
Cet article décrit les différents types de jointures et vous montre 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 s’il existe des champs qui correspondent clairement les uns aux autres. Vous pouvez supprimer une jointure créée automatiquement. Cet article fournit des informations de base sur les relations de table, notamment sur la façon d’en créer une.
Remarque : Vous pouvez joindre des requêtes de la même façon que vous joignez des tables, et vous pouvez également joindre les deux.
Contenu de cet article
-
Afficher les lignes où une valeur commune existe dans les deux tables jointes
-
Afficher toutes les lignes d’une table et les lignes correspondantes de l’autre table
-
Afficher toutes les lignes des deux tables et les joindre lorsqu’une valeur commune existe
-
Joindre des tables basées sur une inégalité des valeurs de champ
Vue d’ensemble
Une base de données est une collection de tables de données qui ont des relations logiques entre elles. Vous utilisez des relations pour connecter des tables par champs qu’elles ont en commun. Une table peut faire partie d’un nombre quelconque de relations, mais chaque relation a toujours exactement deux tables. 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 des requêtes, même si elles ne représentent pas de relations qui ont déjà été définies. Si vous utilisez d’autres requêtes (au lieu de ou en plus des tables) comme sources de données pour une requête, vous pouvez créer des jointures entre les requêtes sources, ainsi qu’entre ces requêtes et les tables que vous utilisez comme sources de données.
Les jointures se comportent de la même façon que les critères de requête en ce qu’elles établissent des règles auxquelles les données doivent correspondre pour être incluses dans les opérations de requête. Contrairement aux critères, les jointures spécifient également que chaque paire de lignes qui répondent aux conditions de jointure sera combinée dans le jeu d’enregistrements pour former une seule ligne.
Il existe quatre types de jointures de base : jointures internes, jointures externes, jointures croisées et jointures inégales. Cet article explore chaque type de jointure que vous pouvez utiliser, pourquoi vous utilisez chaque type et comment créer les jointures.
Les jointures permettent d’interroger les relations des tables : une indication de la façon dont les données de deux sources peuvent être combinées en fonction des valeurs de données qu’elles ont en commun. 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 :
Cette ligne entre les tables représente la jointure. Double-cliquez sur une jointure pour ouvrir la boîte de dialogue Propriétés de jointure (représentée) et examiner ou modifier la jointure.
Les jointures sont parfois directionnelles. Cette zone de la boîte de dialogue indique la table qui est dans la jointure et les champs utilisés pour joindre les tables.
Cette zone détermine le type de jointure : l’option 1 est une jointure interne, 2 est une jointure externe gauche et 3 est 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 jointures de base : jointures internes, jointures externes, jointures croisées et 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 les connaître pour avoir une compréhension complète du fonctionnement des jointures.
Jointures internes : seules les données associées des deux tables combinées
Une jointure interne est une jointure dans laquelle Access inclut uniquement les données d’une table si la table associée contient des données correspondantes, et inversement. La plupart du temps, vous utiliserez des jointures internes. Lorsque vous créez une jointure et que vous ne spécifiez pas de type de jointure, Access suppose que vous souhaitez une jointure interne. Les jointures internes sont utiles, car elles vous permettent de combiner des données de deux sources basées sur des valeurs partagées, de sorte que vous ne voyez les données que lorsqu’il y a 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 semblable à 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 ( la deuxième table de la jointure).
Jointures externes complètes : toutes les données, combinées lorsque 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 les prend pas explicitement en charge. 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 manières possibles
La plupart du temps, une jointure croisée est un effet secondaire de l’ajout de deux tables à une requête, puis de l’oubli de les joindre. Access interprète cela comme signifiant que vous souhaitez voir chaque enregistrement d’une table combiné à chaque enregistrement de l’autre table, c’est-à-dire chaque combinaison d’enregistrements possible. Étant donné qu’aucune donnée ne peut être combinée, ce type de jointure produit rarement des résultats utiles. Mais il existe quelques cas où une jointure croisée est exactement ce dont vous avez besoin.
Jointures inégales : comme une jointure normale, mais en utilisant une comparaison différente pour combiner des lignes
Les jointures inégales utilisent un opérateur autre que le signe égal (=) pour comparer les valeurs et déterminer 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 où une valeur commune existe dans les deux tables jointes
Si vous souhaitez afficher uniquement les lignes qui ont des valeurs correspondantes dans le champ joint, vous utilisez 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 de l’une des tables jointes correspondent aux lignes de l’autre table, sur la base des données des champs joints. Lorsqu’une requête avec une jointure interne est exécutée, seules les lignes où une valeur commune existe dans les deux tables jointes sont incluses dans les opérations de requête.
Comment faire utiliser une jointure interne ?
La plupart du temps, vous n’avez rien à faire pour utiliser une jointure interne. Si les tables que vous ajoutez à une requête ont déjà des relations, Access crée automatiquement une jointure interne entre chaque paire de tables associé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 ont chacune un champ avec le même type de données ou compatible et que l’un des champs de jointure est un clé primaire. 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 et que vous n’avez pas créé de relations entre ces requêtes, 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. Vous créez une jointure interne en faisant 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 dans SQL dans la clause FROM, comme indiqué ci-dessous :
FROM table1 INNER JOIN table2 ON table1.field1 compare table2.field2
L’opération INNER JOIN (jointure interne ) comprend les parties suivantes :
Partie |
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 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 de jointure interne, consultez la rubrique INNER JOIN Operation.
Afficher toutes les lignes d’une table et les lignes correspondantes de l’autre table
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, ainsi que les lignes de l’autre table qui partagent une valeur commune des deux côtés de la jointure.
Les jointures externes peuvent être des jointures externes gauches ou des jointures externes droites. 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 uniquement les lignes de l’autre table où le champ de jointure contient des valeurs communes aux deux tables. Dans une jointure externe droite, la requête inclut toutes les lignes de la deuxième table dans la clause FROM de l’instruction SQL, et uniquement les lignes de l’autre table où le champ de jointure contient des valeurs communes aux deux tables.
Remarque : Vous pouvez facilement déterminer la table de gauche ou la table de droite dans une jointure donnée en double-cliquant sur la jointure, puis en recherchant dans la boîte de dialogue Propriétés de la jointure. Vous pouvez également basculer vers la vue SQL, puis examiner la clause FROM.
Étant donné que certaines lignes d’un côté d’une jointure externe n’auront pas de lignes correspondantes de l’autre table, certains des champs retournés dans les résultats de la requête à partir de cette autre table seront vides lorsque les lignes ne correspondent pas.
Comment faire utiliser une jointure externe ?
Vous créez une jointure externe en modifiant une jointure interne existante. S’il n’existe aucune jointure interne, vous en créez une, puis vous la remplacez par une jointure externe.
Remplacer une jointure interne par une jointure externe
-
En mode Création de requête, double-cliquez sur la jointure que vous souhaitez modifier.
La boîte de dialogue Propriétés de la jointure apparaît.
-
Dans la boîte de dialogue Propriétés de la jointure , notez les choix répertoriés en regard des options 2 et 3.
-
Cliquez sur l’option que vous voulez utiliser, puis sur OK.
-
Access affiche la jointure et affiche une flèche qui pointe de la source de données où toutes les lignes seront incluses vers la source de données où seules les lignes qui satisfont à 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 peut ne pas être en mesure de déterminer l’opération de jointure à effectuer en premier. Étant donné que les résultats sont différents selon que la jointure gauche ou interne est effectuée en premier, Access affiche un message d’erreur :
Pour corriger cette erreur, vous devez modifier la requête afin qu’il soit clair quelle jointure effectuer en premier.
Syntaxe SQL pour une jointure externe
Les jointures externes sont spécifiées dans SQL dans la clause FROM, comme indiqué ci-dessous :
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 compare table2.field2Les opérations LEFT JOIN (jointure gauche) et RIGHT JOIN (jointure droite) comprennent les parties suivantes :
Partie |
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 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 de jointure externe, consultez la rubrique LEFT JOIN, RIGHT JOIN Operations.
Afficher toutes les lignes des deux tables et les joindre lorsqu’une valeur commune existe
Lorsque vous souhaitez afficher toutes les lignes de deux tables et les joindre en fonction de valeurs communes, vous utilisez une jointure externe complète. Access ne prend pas explicitement en charge les jointures externes complètes, mais vous pouvez obtenir le même effet à l’aide d’une requête union. La procédure suivante explique comment procéder, mais si vous souhaitez plus d’informations sur les requêtes union, consultez la section Voir aussi .
Pour utiliser une requête union pour effectuer une jointure externe complète :
-
Créez une requête avec une jointure externe gauche sur le champ que vous souhaitez utiliser pour une jointure externe complète.
-
Sous l’onglet Accueil, dans le groupe Affichages, cliquez sur Affichage, puis sur Mode SQL.
-
Appuyez sur Ctrl+C pour copier le code SQL.
-
Supprimez le point-virgule à la fin de la clause FROM, puis appuyez sur ENTRÉE.
-
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.
-
Appuyez sur Ctrl+V pour coller le code SQL que vous avez copié à l’étape 3.
-
Dans le code que vous avez collé, remplacez LEFT JOIN par RIGHT JOIN.
-
Supprimez le point-virgule à la fin de la deuxième clause FROM, puis appuyez sur ENTRÉE.
-
Ajoutez une clause WHERE qui spécifie 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]Vous devez ajouter la clause WHERE suivante :
WHERE Products.ID IS NULL
-
Tapez un point-virgule (;) à la fin de la clause WHERE pour indiquer la fin de la requête union.
-
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 en ce qu’elles ne sont pas explicitement représentées dans Access. Dans une jointure croisée, chaque ligne d’une table est combinée avec chaque ligne d’une autre table, ce qui aboutit à ce que l’on appelle un produit croisé ou un produit cartésien. Chaque fois que vous exécutez une requête contenant 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 existe des cas où elles peuvent être utiles.
Pourquoi utiliser une jointure croisée ?
Si vous souhaitez examiner chaque combinaison possible de lignes entre deux tables ou requêtes, utilisez une jointure croisée. Par exemple, supposons que votre entreprise a connu une année spectaculaire et que vous envisagez d’accorder des rabais à vos clients. Vous pouvez créer une requête qui additionne les achats de chaque client, créer une petite table avec plusieurs pourcentages de remise possibles et combiner les deux dans une autre requête qui effectue une jointure croisée. Vous obtenez une requête qui affiche un ensemble de remises hypothétiques pour chaque client.
Comment faire 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 que vous 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 à toutes les autres lignes des résultats. Considérez le scénario de remise du paragraphe précédent. Supposons que vous avez 91 clients 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 pouvez l’imaginer, les jointures croisées involontaires peuvent créer un grand nombre de lignes dans les résultats de votre requête. De plus, ces résultats sont généralement dépourvus de sens, car si vous n’avez pas réellement l’intention de combiner chaque ligne avec toutes les autres lignes, la plupart des lignes combinées qui apparaissent dans les résultats n’auront pas de sens. Enfin, l’exécution des requêtes qui utilisent des jointures croisées involontaires peut prendre beaucoup de temps.
1. Les champs cerclé doivent être joints les uns aux autres.
1. Notez le très grand nombre d’enregistrements.
1. Notez que le nombre d’enregistrements est beaucoup plus petit.
Joindre des tables basées sur une inégalité des valeurs de champ
Les jointures n’ont pas besoin d’être basées sur l’équivalence des champs joints. Une jointure peut être basée sur n’importe quel opérateur de comparaison, par exemple supérieur à (>), inférieur à (<) ou n’est pas égal à (<>). Les jointures qui ne sont pas basées sur l’équivalence sont appelées jointures inégales.
Si vous souhaitez combiner les lignes de deux sources de données en fonction de valeurs de champ qui ne sont pas égales, vous utilisez une jointure inégale. En règle générale, les jointures iné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 n’est pas égal (<>) peuvent retourner presque autant de lignes que de jointures croisées, et les résultats peuvent être difficiles à interpréter.
Comment faire 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 à l’aide de la vue SQL. Toutefois, vous pouvez créer une jointure en mode Création, basculer vers la vue SQL, rechercher l’opérateur de comparaison égal à (=) et le remplacer par l’opérateur que vous souhaitez utiliser. Après cela, vous ne pouvez ouvrir la requête en mode Création que si vous modifiez d’abord l’opérateur de comparaison sur égal à (=) 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 ont des types de données différents), vous pouvez supprimer la jointure.
-
Dans la grille de conception de requête, cliquez sur la jointure que vous souhaitez supprimer.
-
Appuyez sur SUPPR.
-ou-
-
Dans la grille de conception de requête, cliquez avec le bouton droit sur la jointure que vous souhaitez supprimer, puis cliquez sur Supprimer.