Dans une requête SELECT, la jointure permet de retrouver des informations tirées de deux tables ayant un lien l'une avec l'autre.
Ce lien correspondra, la plupart du temps, une contrainte d'intégrité référentielle mais ce n'est pas une obligation.
Par exemple, on pourrait utiliser une jointure pour lister le modèles des voitures (l'information sera retrouvée dans la table voitures) avec, pour chaque voiture, le nom de son propriétaire (l'information sera retrouvée dans la table clients, les deux tables étant liées par l'identifiant du client).

La jointure permet également de tirer des informations d'une table selon une condition qui ne peut être vérifiée qu'en faisant le lien avec une autre table.
Par exemple : on pourrait utiliser une jointure pour lister le nom des mécaniciens (l'information à afficher sera retrouvée dans la table mecaniciens) pour les factures réalisées aujourd'hui (la condition sera dans la table factures, les deux tables étant liées par l'identifiant des mécaniciens).

La jointure interne est la jointure la plus utilisée. Le SGBD joint les deux tables en ne conservant que les enregistrements qui ont une correspondance dans l'autre table.
Pour effectuer une jointure interne, on utilisera la clause INNER JOIN.
SELECT champ1, champ2, champ3 FROM table1
INNER JOIN table2
ON champ1 = champ2;
Ex :
SELECT * FROM voitures
INNER JOIN clients
ON client_id = clients.id;
Dans cet exemple, puisque la jointure se fait sur client_id = clients.id, on ne verra que les clients qui possèdent au moins une voiture.
Si un client possède plus d'une voiture, ses informations apparaîtront une fois pour chaque voiture qu'il possède.

Lorsque vous êtes en présence d'une relation maître-détail (c'est le cas avec les tables voitures et clients et avec les tables factures et lignesfactures), la jointure interne est idéale pour retrouver rapidement toutes les informations désirées.
Voici un autre exemple : puisqu'on a une relation maître-détail entre la table des factures et la table qui détaille les lignes des factures, on pourra faire afficher la date de la facture pour chaque opération facturée à l'aide de la requête suivante :
SELECT date, prix
FROM factures
INNER JOIN lignesfactures ON facture_id=factures.id;

Il est possible d'ajouter une clause WHERE après avoir fait une jointure, afin de lister seulement quelques enregistrements.
Attention : la clause WHERE sera placée après la clause ON qui définit la jointure et avant la clause ORDER BY.
Ex :
SELECT * FROM voitures
INNER JOIN clients
ON client_id = clients.id
WHERE annee >= 2010
ORDER BY nomfamille, prenom;
▼Publicité