Les jointures internes
Pour afficher des valeurs venant de deux ou de plusieurs tables, on utilise les jointures.
Les jointures internes permettent de récupérer uniquement les données qui ont de correspondance entre les tables. Les données qui n’ont pas de correspondance entre les tables ne sont pas récupérées. La jointure interne affiche moins de données que la jointure externe.
Il est possible de faire la jointure interne avec la clause WHERE et JOIN. Que vous utilisez l’une ou l’autre sur une base de données, les résultats seront tous les mêmes.
Nous allons utiliser notre base de données Person avec la table employee et la table customer.
Database Person
| Table employee
Table customer
|
Jointure interne avec WHERE
La jointure avec WHERE est très limitée et se limite souvent avec le conteneur MySQL. Sur les autres conteneurs de bases de données tels que Oracle, SQL Server, …, l’utilisation de WHERE n’est pas possible. Il est recommandé d’utiliser la clause JOINT.
Par exemple prenons notre base de données ci-dessus et affichons les noms et âges des personnes avec leurs pays et capitales. Ici les informations à afficher sont dans les deux tables (employee et customer) donc nous allons faire une de jointure de tables pour pouvoir récupérer ces informations.
On va utiliser les alias pour faciliter la lisibilité de notre requête.
La syntaxe :
Soit une table 1 nommé ‘tab1’ et table 2 nommé ‘tab2’ avec id1 la clé primaire de la table tab1 et id2 la clé primaire de la table tab2. L’id1 est la clé étrangère dans la table tab2.
Avec étoile (*) on sélectionne tous les attributs. Vous pouvez choisir les attributs qui vous conviennent et laisser étoile (*).
SELECT * FROM nom_tab1, nom_tab2 WHERE nom_tab1.id1 = nom_tab2.id1 ;
Demo de la jointure interne avec WHERE
Création des alias
La classe employee a pour alias e (employee AS e) ou simplement (employee e).
La classe customer a pour alias c (customer AS c) ou simplement (customer c).
Vous pouvez aussi laisser les alias, les résultats sont toujours les mêmes.
On affiche les noms, prénoms des employés avec les noms de leurs de clients ainsi que leurs adresses.
SELECT e.last_name, e.first_name, c.name, c.address FROM employee e, customer c WHERE e.id_customer = c.id_customer ;
Résultat :
| last_name | first_name | name | address |
| Jones | Smith | Rizzo | 89 Oak Ave |
| Jack | Harry | Lombardi | NY 10019 Bld |
| William | James | Mancini | 148 Elm St |
| Michael | Oliver | Rizzo | 89 Oak Ave |
Jointure interne avec INNER JOIN
La clause JOIN est la clause ‘standard’ qui est recommandée et qui marche sur tous les conteneurs de bases de données.
On remplace la clause WHERE par ON.
La syntaxe :
SELECT * FROM nom_tab1 INNER JOIN nom_tab2 ON nom_tab1.id2 = nom_tab2.id2 ;
Demo de la jointure interne avec INNER JOIN
On affiche les noms, prénoms des employés avec les noms de leurs de clients ainsi que leurs adresses.
SELECT s.last_name, s.age, c.country_name, c.capital_city FROM student s INNER JOIN country c ON s.id_country = c.id_country ;
Résultat :
SELECT e.last_name, e.first_name, c.name, c.address FROM employee e INNER JOIN customer c ON e.id_customer = c.id_customer ;
| last_name | first_name | name | address |
| Jones | Smith | Rizzo | 89 Oak Ave |
| Jack | Harry | Lombardi | NY 10019 Bld |
| William | James | Mancini | 148 Elm St |
| Michael | Oliver | Rizzo | 89 Oak Ave |
Remarque : Dans les deux cas on obtient les mêmes résultats. Qu’on utilise WHERE ou INNER JOIN, on va toujours retrouver les mêmes résultats seulement INNER JOIN est recommandé actuellement.
