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 les unes aux autres. Les jointures permettent également de combiner des enregistrements provenant des deux sources de données afin que chaque paire d’enregistrements des sources ne forme qu’un seul enregistrement dans les résultats de la requête.
Cet article traite des 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 entre tables, notamment comment en créer une.
Remarque
Vous pouvez joindre des requêtes de la même manière que vous joignez des tables, et vous pouvez également joindre les deux.
Contenu de cet article
- Présentation
- Types de jointures
- Afficher les lignes contenant une valeur commune dans les deux tables jointes
- Afficher toutes les lignes d’un tableau et les lignes correspondantes de l’autre tableau
- Afficher toutes les lignes des deux tables et les joindre lorsqu’il existe une valeur commune
- Jointures croisées
- Joindre des tables basées sur une inégalité de valeurs de champ
- Supprimer une jointure
Présentation
Une base de données est un ensemble de tables de données qui entretiennent des relations logiques entre elles. Les relations permettent de connecter des tables par des champs qui 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 les 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 des relations déjà définies. Si vous utilisez d’autres requêtes (au lieu de tables ou en plus de celles-ci) en tant que sources de données pour une requête, vous pouvez créer des jointures entre les requêtes sources, ainsi qu’entre celles-ci et les tables que vous utilisez comme sources de données.
Les jointures se comportent de la même manière que les critères de requête en ce sens 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 satisfont aux conditions de jointure sera combinée dans le jeu d’enregistrements pour former une seule ligne.
Il existe quatre principaux types de jointures : les jointures internes, les jointures externes, les jointures croisées et les jointures inégales. Cet article décrit chaque type de jointure que vous pouvez utiliser, pourquoi vous l’utilisez et comment créer des jointures.
Les jointures sont aux requêtes ce que les relations sont aux 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 la jointure (représentée) et examinez ou modifiez la jointure.
Les jointures sont parfois directionnelles. Cette zone de la boîte de dialogue vous montre quelle table se trouve 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 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.
Haut de la page
Types de jointures
Il existe quatre principaux types de jointures : 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 jointures avancés et rarement utilisés, mais vous devez les connaître pour bien comprendre leur fonctionnement.
Jointures internes : seules les données connexes des deux tables combinées
Une jointure interne est une jointure dans laquelle Access inclut uniquement les données d’une table s’il y a des données correspondantes dans la table associée, et vice-versa. La plupart du temps, vous utiliserez des jointures internes. Lorsque vous créez une jointure sans préciser de quel 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 provenant de deux sources en fonction de 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 sont combinées correctement, ainsi que tous les enregistrements restants d’une table
Une jointure externe est similaire à 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 si possible
Dans certains systèmes, une jointure externe peut inclure toutes les lignes des deux tables, les lignes étant combinées lorsqu’elles correspondent. C’est ce qu’on appelle 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é avec chaque enregistrement de l’autre table, c’est-à-dire toutes les combinaisons possibles d’enregistrements. Étant donné qu’aucune donnée ne peut être combinée, ce type de jointure produit rarement des résultats utiles. Mais il y a 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 des 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 contenant une valeur commune dans les deux tables jointes
Si vous souhaitez afficher uniquement les lignes dont le champ joint contient des valeurs correspondantes, 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 dans lesquelles il existe une valeur commune dans les deux tables jointes seront 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 comportent déjà des relations, 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 quelle table se trouve du côté « un » d’une relation un-à-plusieurs et un symbole infini (∞) pour indiquer quelle table 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 celles-ci comportent chacune un champ ayant le même type de données ou un type de données compatible, dont l’un des champs de jointure est une 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 d’une jointure interne
Les jointures internes sont spécifiées en SQL dans la clause FROM, comme illustré ci-dessous :
FROM table1 INNER JOIN table2 ON table1. Champ1 Comparer le tableau2. champ2
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 le même genre de données, mais ils ne doivent pas nécessairement avoir le même nom. |
| comparaison | N’importe quel opérateur de comparaison relationnelle : « = », «< », «> », «< = », «> = » ou «<> . » |
Pour plus d’informations sur la syntaxe de jointure interne, voir la rubrique Opération INNER JOIN.
Haut de la page
Afficher toutes les lignes d’un tableau et les lignes correspondantes de l’autre tableau
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 à gauche ou des jointures externes droites. Dans une jointure externe gauche, la requête inclut toutes les lignes de la première table dans l’instruction SQL FROM et seulement les lignes de l’autre table dont 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 l’instruction SQL FROM et uniquement les lignes de l’autre table dont le champ de jointure contient des valeurs communes aux deux tables.
Remarque
Vous pouvez facilement identifier la table de gauche ou la table de droite d’une jointure donnée en double-cliquant sur la jointure et en consultant la boîte de dialogue Propriétés de la jointure . Vous pouvez également basculer en mode SQL, puis examiner la clause DE.
É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 requête 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 à 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 énumérés en regard de l’option 2 et de l’option 3.
- Cliquez sur l’option que vous voulez utiliser, puis sur OK.
- Access affiche la jointure et une flèche qui pointe de la source de données où toutes les lignes sont incluses vers la source de données où seules les lignes remplissant la condition de jointure sont incluses.
Jointures externes ambiguës
Si vous créez une requête qui contient une jointure LEFT JOIN et une INNER JOIN, Access risque de ne pas être en mesure de déterminer l’opération de jointure à effectuer en premier. Les résultats étant différents selon que la jointure gauche ou la jointure 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 d’une jointure externe
Les jointures externes sont spécifiées en SQL dans la clause FROM, comme illustré ci-dessous :
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 compare table2.field2
Les 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 le même type de données, mais ils n’ont pas besoin d’avoir le même nom. |
| comparaison | N’importe quel opérateur de comparaison relationnelle : « = », «< », «> », «< = », «> = » ou «<> . » |
Pour plus d’informations sur la syntaxe des jointures externes, voir la rubrique OPÉRATIONS JOINTURE GAUCHE, JOINTURE DROITE.
Haut de la page
Afficher toutes les lignes des deux tables et les joindre lorsqu’il existe une valeur commune
Lorsque vous souhaitez afficher toutes les lignes de deux tables et les joindre sur la base 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 en utilisant 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 NULLTapez 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 diffèrent 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 donne 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é en résulte. Les jointures croisées sont généralement involontaires, mais elles peuvent être utiles dans certains cas.
Pourquoi utiliser une jointure croisée ?
Si vous souhaitez examiner toutes les combinaisons possibles de lignes entre deux tables ou requêtes, utilisez une jointure croisée. Par exemple, supposons que votre entreprise ait connu une année spectaculaire et que vous envisagiez 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 qui peut avoir plusieurs pourcentages de remise possibles et combiner les deux dans une autre requête qui effectue une jointure croisée. Vous vous retrouvez avec 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 à chaque autre ligne des résultats. Considérons le scénario de remboursement du paragraphe précédent. Supposons que vous ayez 91 clients et que vous souhaitiez examiner cinq pourcentages de rabais possibles. Votre jointure croisée produit 455 rangées (le produit de 91 et 5).
Comme vous pouvez l’imaginer, des 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énués de sens, car si vous n’avez pas réellement l’intention de combiner toutes les lignes 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 être très longue.
1. Les champs encerclés 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.
Haut de la page
Joindre des tables basées sur une inégalité de 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, tel que supérieur à (>), inférieur à () ou différent de (<<>). Les jointures qui ne sont pas basées sur l’é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 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 l’opérateur 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 renvoyer 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 en mode SQL. Toutefois, vous pouvez créer une jointure en mode Création, basculer en mode SQL, rechercher l’opérateur de comparaison égal à (=) et le remplacer par l’opérateur que vous voulez utiliser. Ensuite, vous ne pouvez rouvrir la requête en mode Création que si vous revenez sur la valeur de l’opérateur de comparaison égal à (=) en mode SQL.
Supprimer une jointure
Si Access crée automatiquement une jointure indésirable ou si vous créez une jointure par erreur (par exemple, une jointure entre deux champs dont les types de données sont différents), vous pouvez supprimer la jointure.
- Dans la grille de création de requête, cliquez sur la jointure que vous souhaitez supprimer.
- Appuyez sur SUPPR.
-ou-
- Dans la grille de création, cliquez avec le bouton droit sur la jointure à supprimer, puis cliquez sur Supprimer.
Haut de la page
Ajouter des enregistrements à une table à l’aide d’une requête AjoutCombiner les résultats de plusieurs requêtes de sélection à l’aide d’une requête UnionCréer une requête basée sur plusieurs tablesCréer, modifier ou supprimer une relation