Easy-Micro


BUREAUTIQUE Microsoft Access
Jointures Access

Les jointures Access

Jointures SQL sous Access

Exemple de requête SQL sous Access :

SELECT Nom, Prénom, Adresse, commune, [code postal] FROM Communes INNER JOIN Personnes ON Communes.code_commune = Personnes.Code_commune;

La qualification est obligatoire pour les champs "code_commune", car il faut préciser de quelle table provient chaque champ. Mais elle est inutile pour les autres champs, car il ne peut y avoir d'ambiguité. Enfin, les crochets sont obligatoires pour évoquer le champ "code postal", dont le nom contient un espace (ils ne le sont pas pour "Prénom", parce que Access tolère les caractères accentués).

"INNER JOIN" traduit ci-dessus l'existence d'une relation entre les deux tables, et "ON" précise quels sont les champs mis en relation.

En SQL pure, la commande précédente s'écrit différemment. La clause INNER JOIN disparaît au profit d'une simple virgule, et la traduction de la mise en relation des tables s'exprime à l'aide de la clause WHERE :

SELECT Nom, Prénom, Adresse, commune, [code postal]
FROM Communes, Personnes
WHERE Communes.code_commune = Personnes.code_commune;

Type de jointures Access

Il existe trois types de jointure sous Access
• La jointure équivalente (inner join)
• La jointure Gauche (left join)
• La jointure Droite (right join)

Cas d'une requêtes monotable (sans jointures)
En SQL on aurait :

SELECT Societe FROM T_clients;

Le nombre de lignes du résultat de la requête correspond au nombre de lignes dans la table.

Requête Access
Requête Access

Cas d'une requête multitables
Requête Access
Requête Access

En SQL on aurait :
SELECT T_clients.Societe
FROM T_clients INNER JOIN T_commandes ON T_clients.Num_client = T_commandes.Num_client;


Résultat: Pas le même nombre de lignes!

La relation entre les 2 tables est qualifée de jointure équivalente. C'est-à-dire que cette requête travaille uniquement sur l'ensemble des associations possibles entre le champ [N° client] de la table des clients et le champ [N° client] de la table de commandes.

Note: Access respecte la notion d'intégrité référentielle dans les relations. C'est à dire qu'il permet de s'assurer que pour une clé étrangère il y a toujours une clé primaire qui lui corresponde (cliquez sur la relation entre les deux tables).

Requête sous Access 2003 Access Rajoutons un regroupement
Si nous parvenions à regrouper en une seule ligne toutes les occurrences d'un même nom de société, nous obtiendrions vraisemblablement les lignes du départ attendues. Faisons donc un clic sur le bouton sigma de notre barre d'outils. Cela fait apparaître une nouvelle ligne dans la grille. Il s'agit de la ligne opération. Nous observons que l'opération sélectionnée est l'opération de regroupement.

En SQL on aurait :
SELECT T_clients.Societe
FROM T_clients INNER JOIN T_commandes ON T_clients.Num_client = T_commandes.Num_client
GROUP BY T_clients.Societe;


Résultat: Moins de lignes!

Nous obtenons cette fois un chiffre de lignes légèrement inférieur aux nombre de client.
Que pouvons-nous en déduire ?


Il n'est pas impossible que nous ayons récupéré en une seule ligne au moins deux sociétés différentes de même nom. Il s'agit donc de s'assurer que chaque client apparaît bien dans sa ligne. Pour cela, rien ne vaut le regroupement sur une valeur unique et facilement identifiable, l'identifiant ou clé primaire

Requête sous Access 2003 Rajoutons donc dans notre requête le champ [N° client] de la table clients.
L'opération est encore une fois l'opération de regroupement. Il s'agit en effet de l'opération par défaut. Décochons la case afficher, car, si le regroupement est utile, l'affichage du code ne nous est pas indispensable pour cet exercice.

Cette fois nous sommes absolument certains qu'il s'agit bien de n clients différents. Les quelques clients restants sont ceux n'ayant pas passé de commandes.

Modifions le type de jointure. Pour cela, il suffit de faire un double-clic sur la relation. Apparait alors la fenêtre suivante :

Jointures sous Access 2003
Types de jointures Access

Les 3 points mentionnés sont dans l'ordre de l'exposé ci-dessus :
1 = Jointure Equivalente
2 = Jointure Gauche
3 = Jointure Droite

Voir les jointures SQL dans le tutorial Easy-Micro pour plus d'infos.


Suivez les aventures des skippers aquitains sur EasyVoile.com
Flux RSS Easy-Micro - Abonnez-vous Easy-Micro [ François Bisch ]
Samedi 23 février 2019 - Semaine 08 - Saint Lazare (Demain: Saint Modeste)
Aujourd'hui, c'est l'anniversaire de Louis Bertignac (1954-65 ans), musicien français (guitariste du groupe de rock français Téléphone). Autre 23 février: 1468 - Mort de Gutenberg, inventeur de l'imprimerie.
Haut de page Easy-Micro