Parfois, pour créer et utiliser des requêtes, il suffit de sélectionner des champs dans une table, d'appliquer éventuellement certains critères et d'afficher les résultats. Mais, comment faut-il procéder quand, et c'est souvent le cas, les données dont vous avez besoin se trouvent dans plusieurs tables ? Heureusement, il est possible de créer une requête qui combine des informations de plusieurs sources. À cet égard, cette rubrique présente quelques scénarios dans lesquels des données sont extraites de plusieurs tables et vous indique comment procéder.
Que voulez-vous faire ?
Utiliser les données d'une table liée pour compléter les informations dans une requête
Dans certains cas, une requête basée sur une table vous fournit les informations dont vous avez besoin, mais extraire des données d'une autre table peut rendre les résultats plus faciles à interpréter et plus utiles. Par exemple, supposons que vous disposez d'une liste des identificateurs des employés qui apparaissent dans les résultats de la requête. Vous réalisez alors qu'il serait plus utile de voir le nom des employés dans les résultats, mais ces noms se trouvent dans une autre table. Pour que le nom des employés apparaisse dans les résultats de la requête, vous devez donc inclure les deux tables dans la requête.
Utiliser l'Assistant Requête pour créer une requête à partir d'une table principale et d'une table liée à celle-ci
- Vérifiez que la relation (relation : association établie entre des champs communs (colonnes) de deux tables. Une relation peut être de type un à un, un à plusieurs ou plusieurs à plusieurs.) des tables est définie dans la fenêtre Relations (fenêtre Relations : onglet d’objet dans lequel vous affichez, créez et modifiez des relations entre des tables et des requêtes.).
Procédure
- Sous l'onglet Outils de base de données, dans le groupe Afficher/Masquer, cliquez sur Relations.
- Sous l'onglet Créer, dans le groupe Relations, cliquez sur Afficher toutes les relations.
- Identifiez les tables pour lesquelles une relation doit être définie.
- Si les tables sont visibles dans la fenêtre Relations, vérifiez qu'une relation a été définie pour celles-ci.
Une relation est une ligne reliant les deux tables sur un champ commun. Double-cliquez sur une relation pour voir quels champs sont reliés dans les tables.
- Si les tables ne sont pas visibles dans la fenêtre Relations, vous devez les ajouter.
Sous l'onglet Créer, dans le groupe Afficher/Masquer, cliquez sur Noms des tables.
Double-cliquez sur chaque table à afficher, puis cliquez sur Fermer.
- Si vous ne trouvez aucune relation entre les deux tables, créez-en une en faisant glisser un champ d'une des tables sur un champ de l'autre table. Les champs à partir desquels vous créez la relation entre les tables doivent avoir des types de données identiques.
Remarque Vous pouvez créer une relation entre un champ de type NuméroAuto (type de données NuméroAuto : dans une base de données Microsoft Access, type de données de champ qui stocke automatiquement un numéro unique pour chaque enregistrement lors de son ajout à une table. Trois types de numéros peuvent être créés : séquentiel, aléatoire et numéro de réplication.) et un champ de type Numérique (type de données Numérique : dans une base de données Microsoft Access, type de données de champ conçu pour les données numériques utilisées dans des calculs mathématiques. Toutefois, utilisez le type de données Monétaire pour afficher ou calculer des valeurs monétaires.) si la taille de ce champ est Entier long. C'est souvent le cas lorsque vous créez 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.).
La boîte de dialogue Modifier des relations s'affiche.
- Cliquez sur Créer pour créer la relation.
Pour plus d'informations sur les options à votre disposition pour créer une relation, voir l'article Créer, modifier ou supprimer une relation.
- Fermez la fenêtre Relations.
- Sous l'onglet Créer, dans le groupe Autre, cliquez sur Assistant Requête.
- Dans la boîte de dialogue Nouvelle requête, cliquez sur Assistant Requête simple, puis sur OK.
- Dans la zone de liste déroulante Tables/Requêtes, cliquez sur la table qui contient les informations essentielles à inclure dans la requête.
- Dans la liste Champs disponibles, cliquez sur le premier champ à inclure dans la requête, puis cliquez sur la flèche vers la droite pour déplacer ce champ dans la liste Champs sélectionnés. Procédez de la même manière pour chaque champ de cette table à inclure dans la requête. Il peut s'agir de champs que vous souhaitez voir apparaître dans les résultats de la requête ou de champs que vous voulez utiliser pour limiter les lignes dans les résultats en appliquant des critères.
- Dans la zone de liste déroulante Tables/Requêtes, cliquez sur la table qui contient les données connexes à utiliser pour que la requête renvoie des résultats plus précis.
- Ajoutez les champs que vous voulez utiliser pour affiner les résultats de la requête à la liste Champs sélectionnés, puis cliquez sur Suivant.
- Sous Souhaitez-vous une requête détaillée ou une synthèse ?, cliquez sur Détaillée ou Synthèse.
Si vous ne voulez pas que votre requête exécute des fonctions d'agrégation (Somme, Moy, Min, Max, Total, EcartType ou Var), choisissez une requête détaillée. Dans le cas contraire, choisissez une requête de synthèse. Lorsque vous avez choisi, cliquez sur Suivant.
- Cliquez sur Terminer pour afficher les résultats.
Exemple avec la base de données Comptoirs
Dans l'exemple suivant, vous devez utiliser l'Assistant Requête pour créer une requête qui affiche une liste de commandes avec les frais d'expédition et le nom de l'employé qui a traité chaque commande.
Remarque Dans cet exemple, la base de données Comptoirs doit être modifiée. Avant d'aller plus loin, il peut être judicieux de créer une copie de sauvegarde de cette base de données et d'utiliser la copie pour l'exemple.
Utiliser l'Assistant Requête pour créer la requête
- Ouvrez la base de données exemple Comptoirs. Fermez le formulaire d'ouverture.
- Sous l'onglet Créer, dans le groupe Autre, cliquez sur Assistant Requête.
- Dans la boîte de dialogue Nouvelle requête, cliquez sur Assistant Requête simple, puis sur OK.
- Dans la zone de liste déroulanteTables/Requêtes, cliquez sur Table : Commandes.
- Dans la liste Champs disponibles, double-cliquez sur RéfCommande pour déplacer ce champ dans la liste Champs sélectionnés. Double-cliquez sur Frais d'expédition pour déplacer ce champ dans la liste Champs sélectionnés.
- Dans la liste de zone déroulante Tables/Requêtes, cliquez sur Table : Employés.
- Dans la liste Champs disponibles, double-cliquez sur Prénom pour déplacer ce champ dans la liste Champs sélectionnés. Double-cliquez sur NomFamille pour déplacer ce champ dans la liste Champs sélectionnés. Cliquez sur Suivant.
- Étant donné que vous créez une liste de toutes les commandes, il est préférable d'utiliser une requête détaillée. Si vous voulez obtenir une synthèse des frais d'expédition sur les commandes par employé ou effectuer une autre fonction d'agrégation, utilisez une requête de synthèse. Cliquez sur Détaillée (affiche chaque champ de tous les enregistrements), puis sur Suivant.
- Cliquez sur Terminer pour afficher les résultats.
La requête renvoie une liste des commandes, avec pour chaque commande, les frais d'expédition ainsi que les prénom et nom de l'employé qui l'a traitée.
Haut de la page
Connecter les données dans deux tables en utilisant leurs relations avec une troisième table
Il arrive souvent que les données de deux tables soient reliées entre elles par l'intermédiaire d'une troisième table. C'est en général le cas lorsque les données des deux premières tables sont liées dans une relation plusieurs-à-plusieurs (relation plusieurs à plusieurs : association entre deux tables dans laquelle un enregistrement de l’une des tables peut être lié à plusieurs enregistrements de l’autre table. Pour établir une relation de ce type, créez une troisième table, puis ajoutez à cette table les champs de clé primaire des deux autres tables.). Dans une base de données, il est souvent préférable de séparer une relation plusieurs-à-plusieurs entre deux tables en deux relations 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.) impliquant trois tables. Pour cela, vous devez créer une troisième table, appelée table de jointure ou table de relation qui comporte 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.) et une clé étrangère (clé étrangère : un ou plusieurs champs de table (colonnes) qui font référence au(x) champ(s) de clé primaire d’une autre table. Une clé étrangère indique comment les tables sont liées.) pour chacune des deux autres tables. Une relation un-à-plusieurs est alors créée entre chaque clé étrangère dans la table de jointure et la clé primaire correspondante d'une des deux autres tables. Dans ce type de situation, vous devez inclure les trois tables dans votre requête, même si vous ne voulez extraire les données que de deux d'entre elles.
Créer une requête de sélection à partir de deux tables comportant une relation plusieurs-à-plusieurs
- Sous l'onglet Créer, dans le groupe Autre, cliquez sur Création de requête.
La boîte de dialogue Afficher la table s'ouvre.
- Dans la boîte de dialogue Afficher la table, double-cliquez sur les deux tables qui contiennent les données que vous voulez inclure dans votre requête et sur la table de jointure qui les relie, puis cliquez sur Fermer.
Les trois tables apparaissent dans l'espace de création de la requête, jointes par les champs appropriés.
- Double-cliquez sur chacun des champs que vous voulez utiliser dans les résultats de la requête. Chaque champ apparaît dans la grille de création (grille de création : grille qui vous permet de créer une requête ou un filtre en mode Création de requête ou dans la fenêtre Filtre/tri avancé. Pour les requêtes, cette grille était auparavant appelée « grille d’interrogation ».) de la requête.
- Dans la grille de création, utilisez la ligne Critères pour entrer des critères de champ. Pour utiliser un critère de champ sans afficher le champ dans les résultats de la requête, désactivez la case à cocher dans la ligne Afficher pour ce champ.
- Pour trier les résultats à partir des valeurs d'un champ, dans la grille de création de la requête, cliquez sur Croissant ou Décroissant (en fonction du sens dans lequel vous voulez trier les enregistrements) dans la ligne Trier de ce champ.
- Sous l'onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
Access affiche les résultats de la requête en mode Feuille de données (mode Feuille de données : fenêtre qui affiche des données d’une table, d’un formulaire, d’une requête, d’une vue ou d’une procédure stockée sous forme de lignes et de colonnes. En mode Feuille de données, vous pouvez modifier des champs et ajouter, supprimer ou rechercher des données.).
Exemple avec la base de données Comptoirs
Remarque Dans cet exemple, la base de données Comptoirs doit être modifiée. Avant d'aller plus loin, il peut être judicieux de créer une copie de sauvegarde de cette base de données et d'utiliser la copie pour l'exemple.
Si vous avez une nouvelle opportunité, à savoir un fournisseur à Rio de Janeiro qui a trouvé votre site Web et qui souhaite traiter avec vous. Cepedant, ce fournisseur n'opère qu'avec des contacts basé à Rio et près de Sao Paulo. Il fournit chaque catégorie de produit alimentaire qui vous intéresse. Il représente une société d'une taille relativement importante et il veut que vous lui garantissiez suffisamment de ventes potentielles pour rendre cette affaire intéressante : au moins 20 000,00 R$ (soit environ 9 300,00 USD) par an. Pouvez-vous lui procurer le marché qu'il recherche ?
Les données nécessaires pour répondre à cette question se trouvent dans deux tables différente : la table Clients et la table Détails commande. Ces tables sont liées l'une à l'autre par une table Commandes. Les relations entre les tables ont déjà été définies. Dans la table Commandes, chaque commande ne peut avoir qu'un seul client, associé à la table Clients par le champ RéfClient. Chaque enregistrement de la table Détails des commandes est associé à une commande unique dans la table Commandes, dans le champ RéfCommande. Par conséquent, un client donné peut avoir plusieurs commandes, chacune comportant plusieurs détails de commande.
Dans cet exemple, vous allez créer une requête analyse croisée qui affiche le total des ventes par an, dans les villes de Rio de Janeiro et Sao Paulo.
Créer la requête en mode Création
- Ouvrez la base de données Comptoirs. Fermez le formulaire d'ouverture.
- Sous l'onglet Créer, dans le groupe Autre, cliquez sur Création de requête.
La boîte de dialogue Afficher la table s'affiche.
- Dans la boîte de dialogue Afficher la table, double-cliquez sur Clients, Commandes, et Détails commande, puis cliquez sur Fermer.
Les trois tables apparaissent dans l'espace de création de la requête.
- Dans la table Clients, double-cliquez sur le champ Ville pour l'ajouter dans la grille de création de requête.
- Dans la grille de création de requête, dans la colonne Ville, dans la ligne Critères, tapez In ("Rio de Janeiro","Sao Paulo") . Seuls les enregistrements, dont le client se trouve dans l'une des deux villes, sont inclus dans la requête.
- Dans la table Détails commande, double-cliquez sur les champs DateExpédition et PrixUnitaire.
Les deux champs sont ajoutés à la grille de création de la requête.
- Dans la colonne DateExpédition de la grille de création de requête, sélectionnez la ligne Champ. Remplacez [DateExpédition] par Année : Format([DateExpédition],"aaaa"). C'est ainsi qu'est créé un alias de champ, Année, qui vous permet d'utiliser la section année de la valeur dans le champ DateExpédition.
- Dans la colonne PrixUnitaire de la grille de création de requête, sélectionnez la ligne Champ . Remplacez [PrixUnitaire] par : Ventes : [Détails commande].[PrixUnitaire]*[Quantité]-[Détails commande].[PrixUnitaire]*[Quantité]*[Remise] . C'est ainsi qu'est créé un alias de champ, Ventes, qui calcule les ventes pour chaque enregistrement.
- Sous l'onglet Création, dans le groupe Type de requête, cliquez sur Analyse croisée.
Les deux nouvelles lignes suivantes : Total et Analyse croisée apparaissent dans la grille de création de requête.
- Dans la colonne Ville de la grille de création de requête, cliquez sur la ligne Analyse croisée, puis cliquez sur En-tête de ligne.
C'est ainsi que sont affichées les villes comme des en-têtes de ligne (en d'autres termes, la requête renvoie une ligne par ville).
- Dans la colonne Année, cliquez sur la ligne Analyse croisée, puis cliquez sur En-tête de colonne.
C'est ainsi que sont affichées les années comme des en-têtes de colonne (en d'autres termes, la requête renvoie une colonne par année).
- Dans la colonne Ventes, cliquez sur la ligne Analyse croisée, puis cliquez sur Valeur.
C'est ainsi que sont affichées les ventes à l'intersection des lignes et des colonnes (en d'autres termes, la requête renvoie les ventes pour chaque combinaison de ville et d'année).
- Dans la colonne Ventes, cliquez sur la ligne Totaux, puis cliquez sur Additionner.
C'est ainsi que la requête additionne les valeurs de cette colonne.
Vous pouvez définir la ligne Totaux pour les deux autres colonnes sur la valeur par défaut Grouper par, car vous souhaitez afficher chaque valeur pour ces colonnes, et non les valeurs d'agrégation.
- Sous l'onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
Votre requête renvoie dorénavant le total des ventes enregistré par an à Rio de Janeiro et Sao Paulo.
Haut de la page
Afficher tous les enregistrements de deux tables similaires
Il arrive parfois que vous deviez combiner des données de deux tables ayant une structure identique mais se trouvant dans des bases de données différentes. Considérez le scénario suivant.
Supposons que vous êtes un analyste qui travaille avec des données concernant les élèves d'une école. Vous voulez mettre sur pied un partage de données entre votre école et une autre pour que les deux établissements puissent améliorer leurs programmes. Pour certaines des questions que vous voulez examiner, il peut être plus judicieux d'étudier les données des deux écoles ensemble que séparément.
Vous pourriez importer les données de l'autre école dans de nouvelles tables de votre base de données. Dans ce cas, si les données de l'autre école devaient changer, les modifications ne seraient pas reflétées dans votre base de données. Une meilleure solution consiste à lier vos tables à celles de l'autre école, puis à créer des requêtes qui combinent les données lorsque vous les exécutez. Vous serez alors en mesure d'analyser un seul ensemble de données, au lieu d'effectuer deux analyses et d'essayer de les interpréter comme si elles n'en formaient qu'une seule.
Pour afficher tous les enregistrements de deux tables avec une structure identique, utilisez une requête union (requête Union : requête qui utilise l’opérateur UNION pour combiner les résultats de deux requêtes Sélection, ou plus.).
Les requêtes union ne peuvent pas être affichées en mode Création. Vous devez les créer à l'aide de commandes SQL que vous entrez dans un onglet d'objet dumode SQL (mode SQL : onglet d’objet qui affiche l’instruction SQL correspondant à la requête en cours ou qui est utilisé pour créer une requête spécifique à SQL (Union, directe ou Définition de données). Lorsque vous créez une requête en mode Création, l’équivalent SQL est construit en mode SQL.).
Créer une requête union à partir de deux tables
- Sous l'onglet Créer, dans le groupe Autre, cliquez sur Création de requête.
Une nouvelle grille de création de requête s'ouvre et la boîte de dialogue Afficher la table apparaît.
- Dans la boîte de dialogue Afficher la table, cliquez sur Fermer.
- Sous l'onglet Créer, dans le groupe Type de requête, cliquez sur Union.
La requête bascule du mode Création au mode SQL. L'onglet d'objet du mode SQL est pour l'instant vide.
- En mode SQL, tapez SELECT suivi de la liste des champs de la première table à inclure dans la requête. Le nom des champs doit être placé entre crochets et séparé par des virgules. Une fois que vous avez tapé ces noms, appuyez sur Entrée. Le curseur se déplace d'une ligne vers le bas dans le mode SQL.
- Tapez FROM suivi du nom de la première table à inclure dans la requête. Appuyez sur ENTRÉE.
- Si vous voulez spécifier un critère pour un champ de la première table, tapez WHERE, suivi du nom du champ, un opérateur de comparaison (en général, un signe égal (=)) et le critère. Vous pouvez ajouter des critères supplémentaires à la fin de la clause WHERE, en utilisant le mot clé AND et la même syntaxe que celle du premier critère ; par exemple, WHERE [NiveauClasse]="100" AND [HeuresCrédit]>2. Une fois que vous avez spécifié les critères, appuyez sur Entrée.
- Tapez UNION, puis appuyez sur Entrée.
- Tapez SELECT suivi d'une liste des champs de la seconde table à inclure dans la requête. Vous devez inclure les mêmes champs que ceux de la première table et dans le même ordre. Le nom des champs doit être placé entre crochets et séparé par des virgules. Une fois que vous avez tapé ces noms, appuyez sur Entrée.
- Tapez FROM suivi du nom de la seconde table à inclure dans la requête. Appuyez sur ENTRÉE.
- Si vous le souhaitez, ajoutez une clause WHERE, comme indiqué à l'étape 6 de cette procédure.
- Tapez un point-virgule (;) pour indiquer la fin de votre requête.
- Sous l'onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
Les résultats apparaissent en mode Feuille de données.
Haut de la page