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

 

 

id_employeelast_namefirst_namesalaryid_customer
 1JonesSmith12001
 2JackHarry60303
3WilliamJames70052
4MichaelOliver35001

 

 

 

 

 

 

 

 

Table customer

 

id_customernameaddress
1Rizzo89 Oak Ave
2Mancini148 Elm St
3LombardiNY 10019 Bld

 

 

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_namefirst_namenameaddress
JonesSmithRizzo89 Oak Ave
JackHarryLombardiNY 10019 Bld
WilliamJamesMancini148 Elm St
MichaelOliverRizzo89 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_namefirst_namenameaddress
JonesSmithRizzo89 Oak Ave
JackHarryLombardiNY 10019 Bld
WilliamJamesMancini148 Elm St
MichaelOliverRizzo89 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.