... JOIN ... ON ...
Généralités
Les jointures permettent de faire des requêtes dans une table temporaire issue de la fusion de plusieurs tables suivant une condition donnée.
La syntaxe de la jointure est : table_A JOIN table_B ON condition.
La table temporaire obtenue dispose de l'ensemble des attributs des deux tables dont on fait la jointure.
Les jointures sont en générale utilisées avec des tables liées par des clés étrangères.
Exemple détaillé
• Considérons les deux tables suivantes où l'attribut client de la table Commandes est une clé étrangère liée à la table Clients :
|
|
• La jointure Clients JOIN Commandes ON Clients.id_client = Commandes.client va créer la table temporaire suivante :
| id_client | prénom | nom | id_commande | client | date | montant |
|---|---|---|---|---|---|---|
| 1 | Alain | Térieur | 1 | 1 | 2015-08-23 | 45 |
| 1 | Alain | Térieu | 2 | 1 | 2015-09-253 | 102 |
| 4 | Alphonse | Danleuta | 3 | 4 | 2015-10-15 | 63 |
| 3 | Nadine | Greux | 4 | 3 | 2015-10-29 | 113 |
| 2 | Jean | Naymar | 4 | 2 | 2015-11-18 | 28 |
On observe que les valeurs des attributs id_client et client sont bien égales.
• Il est possible de faire des requêtes avec cette table.
Ainsi, la requête suivante :
SELECT prénom, nom
FROM Clients JOIN Commandes ON Clients.id_client = Commandes.client
WHERE montant >= 100;
renvoie le résultat suivant :
| prénom | nom | montant |
|---|---|---|
| Alain | Térieur | 102 |
| Nadine | Greux | 113 |
Remarques
Référence aux tables
L'utilisation d'un attribut dans une requête, même avec jointure, ne nécessite pas, lorsqu'il n'y a pas d'ambiguïté, de préciser la table de l'attribut. Cependant, pour plus de clarté, cela est souhaitable, voir indispensable si deux attributs ont le même intitulé.
Ainsi, la requête de l'exemple précédent pourrait s'écrire :
SELECT prénom, nom
FROM Clients JOIN Commandes ON id_client = client
WHERE montant >= 100;
Utilisation des alias (voir AS)
Les alias sont utilises :
- dans le cas où les noms des tables sont complexes ;
- dans le cas où les noms des attributs ne sont pas assez explicites ;
- dans les jointures pour simplifier l'écriture de la requête.