31 janvier 2019

MySQL – Les jointures Internes – INNER JOIN (terminal)

Les jointure internes servent à faire une recherche basée sur plusieurs tables en même temps.

Si la base de données est cohérente, les tables possèdent des champs identiques entre elles ce qui permet de faire la relation entre certaines données.

Par exemple, la base de données magasin et les tables :

Articles
Commandes
Vendeurs

Contenu des tables :

L’objectif est de récupérer le chiffre d’affaire de tel ou tel vendeur. Cette donnée n’apparait dans aucune table distincte, et il va falloir lier les trois tables pour avoir le résultat recherché, à savoir :
Nom du vendeur, Prénom du vendeur, et Chiffre d’affaire.

Pour lier ces tables, il nous faut des colonnes (ou champs) qui seront identiques d’une table à l’autre. Ces champs sont en rouge dans les tableau ci-dessus. On va donc créer une liaison de cette façon :

On va donc lier ces trois table en créant une super-tables, grâce à la directive INNER JOIN :

[magasin]> SELECT vendeurs.Nom, vendeurs.Prenom, SUM( articles.Prix * commandes.Quantité ) AS ‘Chiffre’
-> FROM vendeurs
-> INNER JOIN commandes ON vendeurs.VendeurID = commandes.VendeurID
-> INNER JOIN articles ON commandes.ArticleID = articles.ArticleID
-> GROUP BY vendeurs.VendeurID ;

Qu’a t’on fait ?

-On demande d’afficher les Nom, Prenom, et le chiffre d’affaire des vendeur. La directive SUM indique que l’on veut la somme de Prix * Quantité. Le calcul effectué s’affichera dans une colonne Chiffre grâce à la directive AS.

-Puis on relie nos bases tel que dans le schéma ci-dessus :

->A partir de vendeurs on joint commandes en précisant les champs de jointure (cases rouges) grâce à ON.

->On continue la jointure mais cette fois de commandes à articles.

La jointure est faite. L’option GROUP BY permet de définir l’affichage du résultat.

Au lieu de GROUP BY vendeurs.VendeurID ;
On peut mettre WHERE vendeurs.VendeurID LIKE 2 ;
Pour afficher seulement le chiffre d’affaire de Bernard Dupont dont le VendeurID est 2.

Share

You may also like...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


The reCAPTCHA verification period has expired. Please reload the page.