Fr:Utiliser une Jointure Externe dans une Requête

From NeoWiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 09:14, 28 October 2007 (edit)
Jgd (Talk | contribs)
(translation of the English article "Using An Outer Join in a Query")
← Previous diff
Current revision (09:14, 28 October 2007) (edit) (undo)
Jgd (Talk | contribs)
(translation of the English article "Using An Outer Join in a Query")
 

Current revision

Cet article fait partie de la série de tutoriels Base Aller et Retour.

Par défaut, Base utilise des liens (ou jointures) internes lorsque vous créez une requête qui combine des champs de différentes tables. En fait, Base utilise la commande WHERE plutôt que INNER JOIN dans de telles circonstances, mais Base catalogue ce type de lien comme lien interne, et le résultat est généralement le même. Un INNER JOIN sélectionne seulement dans chaque table les enregistrements qui correspondent à des enregistrements dans les autres tables utilisées. Lorsque nous avons créé la requête Liste des observations, celle-ci renvoyait les seules valeurs de OiseauxID qui correspondaient à des oiseaux que l'utilisateur avait effectivement identifiés, et non toutes les valeurs de ce champ.

Cependant, dans certains cas, vous pouvez désirer voir tous les enregistrements d'une table, qu'ils correspondent ou non à des enregistrements d'une autre table. Par exemple, les photos stockées dans la table PhotosOiseaux ne correspondent pas toutes à un enregistrement de la table Sorties. Mais si nous voulons savoir aussi où les photos ont été prises, dans le cas où elles ont été prises au cours d'une sortie d'observation, nous pouvons le faire en utilisant un OUTER JOIN.

Contents

Utiliser une jointure externe pour relier deux tables

  1. Cliquez sur l'icône Requêtes dans la colonne de gauche de la fenêtre principale.
  2. Cliquez sur la ligne Créer une requête en mode Ébauche dans la section Tâches. Les fenêtres Ébauche de requête et Ajouter une table ou une requête s'ouvrent.
  3. Dans la fenêtre Ajouter une table ou une requête, ajouter les tables PhotosOiseaux et Sorties en sélectionnant chacune d'elles et en cliquant sur Ajouter.
  4. Fermez la fenêtre Ajouter une table ou une requête.
  5. Ajoutez les champs suivants depuis les tables aux colonnes de la partie inférieure de la fenêtre Ébauche de requête. Voyez cet article si vous ne savez plus comment faire.
    Oiseau de la table PhotosOiseaux
    DatePhoto de la table PhotosOiseaux
    Site de la table Sorties.
  6. Dans la partie de la fenêtre Ébauche de requête qui contient les tables, vous devriez voir une ligne reliant SortiePhotoID dans la table PhotosOiseaux et SortiesID de la table Sorties. Si ce n'est pas le cas, glissez le pointeur de l'un de ces champs sur l'autre pour la créer.
  7. Cliquez sur cette ligne qui devient bleue.
  8. Faites un double clic sur elle. La fenêtre Propriétés de la jointure s'ouvre.
  9. Dans la section Options, le menu déroulant Type est réglé sur Interne. Cliquez sur ce menu pour faire apparaitre les options Gauche et Droite. Une jointure gauche contient tous les enregistrements des champs répertoriés dans la colonne de gauche de la section Champs impliqués, et uniquement les enregistrements de la colonne de droite pour lesquels les contenus sont identiques. Une jointure droite fait l'inverse.
  10. Comme le champ SortiePhotoID est dans la colonne de gauche, choisissez Gauche comme type de jointure.
  11. Cliquez sur OK.
  12. Pour tester le résultat de la requête, cliquez sur l'icône Exécuter la requête de la barre d'outils. Il représente une source de base de données avec une flèche verte.
  13. Enregistrer la requête en pressant les touches Cmd-S. Donnez un nom à cette requête. Je l'ai intitulée Sites_PhotosOiseaux.

Utliser l'approche requête-dans-une-requête pour combiner plus de deux tables

La méthode ci-dessus n'est utilisable que si deux tables seulement sont impliquées. Utiliser une jointure droite ou gauche dans une requête combinant plus de deux tables produit souvent des résultats non souhaités. Cela est dû au fait que Base remplace les réglages du mode ébauche en déclarations SQL. Les utilisateurs à l'aise avec SQL peuvent créer des déclarations SELECT correctement classées en utilisant les LEFT ou RIGHT JOINS en mode SQL. Pour ceux d'entre nous qui sont moins à l'aise avec SQL, il est aussi possible d'obtenir les résultats désirés en utilisant l'approche requête-dans-une-requête, quelquefois appelée QiQ (anglais Query-in-a-Query).
Essentiellement, vous utilisez des requêtes "latérales" pour combiner les différentes tables. Ces requêtes latérales sont alors combinées dans une requête "centrale" qui utilise une jointure droite ou gauche. (Notez que les termes "latérales" et "requête centrale" sont propres à l'auteur original de cet article).

Déterminer les côtés de la requête centrale

La première étape consiste à déterminer quelles tables doivent être combinées dans quelles requêtes "latérales". Réfléchissez à cela soigneusement. Commencez par l'objet de la requête centrale et, de là, déterminez ce que doit être la configuration des requêtes latérales.
Dans notre exemple, nous voulons obtenir une requête qui affiche la liste de tous les oiseaux photographiés, rangés dans l'ordre de OiseauxID et la date à laquelle la photo a été prise. Si la photo a été prise au cours d'une sortie, nous voulons aussi obtenir SortieID, le site où la photo a été prise et le département dans lequel se trouve ce site. Nous voulons répertorier uniquement les sorties, et l'information correspondante sur les sites qui correspondent à un enregistrement dans la table PhotosOiseaux. Donc les deux côtés doivent être

du côté Oiseaux : OiseauID, Oiseau, SortiePhotoID, DatePhoto
du côté Sorties : SortieID, Site, Département.

Note : Chaque requête latérale doit inclure un champ qui peut être lié à un champ de l'autre côté de la requête. La description des résultats dont nous avons besoin exposée ci-dessus ne fait pas mention du champ SortiePhotoID. Mais nous devons l'inclure dans le côté Oiseau de la requête afin de relier cette requête à celle du côté Sortie.

Créer les requêtes latérales

Note : comme la création des requêtes a été exposée en détail dans un tutoriel antérieur, les indications ci-dessous supposent que le lecteur est familiarisé avec les bases de cette création. Ceux qui ne le seraient pas doivent lire au préalable l'article Créer une requête qui combine des champs de différentes tables.

  1. Créez une requête intitulée ImageOiseau_OiseauxID. Incluez les champs OiseauxID, Oiseau, SortiePhotoID et DatePhoto des tables PhotosOiseaux et Oiseaux.
  2. Créez une requête intitulée Sorties_Sites. Incluez les champs SortiesID, Site et Département des tables Sorties et Sites .

Créer la requête centrale

  1. Créez une nouvelle requête intitulée Images_Sites.
  2. Ajoutez les requêtes ImageOiseau_OiseauxID et Sorties_Sites
  3. Ajourez les champs suivants dans les colonnes de la fenêtre Ébauche de requête
    OiseauxID
    Oiseau
    DatePhoto
    Site
    Département
  4. Glissez le champ SortiePhotoID de la fenêtre ImageOiseau_OiseauxID jusqu'au champ SorieID dans la fenêtre Sorties_Sites. Une ligne apparait entre les deux champs.
  5. Faites un double clic sur cette ligne pour ouvrir la fenêtre Propriétés de la jointure.
  6. Dans la section Options, réglez le type convenable dans le menu déroulant Type. Lisez soigneusement les descriptions des jointures gauches et droites; gauche et droite ne se réfèrent pas nécessairement aux positions relatives des tables sur l'écran. Vous voulez tous les enregistrements de la table ImageOiseau_OiseauxID. Lorsque j'ai créé cette requête, cela signifiait une jointure droite.

Notes

  • Vous pouvez ajouter des critères de tri à chaque jointure latérale, ou à la jointure centrale. Voir Trier dans les Requêtes et les Tables.
  • Vous pouvez créer des requêtes très complexes en utilisant des jointures gauches ou droites dans les requêtes latérales. Rappelez-vous seulement qu'une requête utilisant une jointure gauche ou droite ne peut combiner que deux tables ou deux requêtes. Si nécessaire, vous pouvez créer une chaine de requêtes latérales et centrales dans une requête "maître".


Cet article dans d'autres langues : English
Personal tools