Jointures

Jointures

8 mai 2021

Comme leur nom l'indique, les jointures permettent de mettre ensemble deux tables ou plus de façon à obtenir une seule table en sortie de résultats.

Reprenons les tables de l'article précédent sur les clés étrangères.

Nom de la table : users.

id prenom age city_id
1 Sylvie 34 1
2 Paul 56 2
3 Léo 18 2
4 Sarah 27 3
5 Mathilde 42 NULL

Nom de la table : city.

id name
1 Metz
2 Troyes
3 Reims
4 Paris

INNER JOIN

Grâce aux jointures, je peux sélectionner tous les utilisateurs, mais aussi le nom de la ville à laquelle chacun est relié.

La commande INNER JOIN est idéale pour cela.

SELECT * FROM users
INNER JOIN city ON city.id = users.city_id

Résultat :

id prenom age city_id id name
1 Sylvie 34 1 1 Metz
2 Paul 56 2 2 Troyes
3 Léo 18 2 2 Troyes
4 Sarah 27 3 3 Reims

Les deux dernières colonnes du résultat ci-dessus sont les colonnes de la table city.

  • La requête sélectionne tous les utilisateurs : SELECT * FROM users.
  • Ensuite, nous demandons à intégrer la table city aux résultats : INNER JOIN city.
  • Enfin, nous faisons en sorte de mettre de l'ordre dans les données grâce à la commande ON qui fonctionne exactement pareil que la commande WHERE : ON city.id = users.city_id.

Notre requête SQL a joint les deux tables, users et city en prenant soin de bien coordonner les données de la table city selon les id enregistrés dans la colonne clé étrangère de la table users.

Vous remarquerez aussi que les données ayant la valeur "Paris" et "Mathilde" n'apparaissent pas dans les résultats et cela est tout à fait normal. INNER JOIN prend seulement les données possédant une relation d'un côté ou de l'autre. "Paris" n'étant reliée à aucun utilisateur, elle est exclue des résultats.

LEFT JOIN

La commande LEFT JOIN effectue le même travail que la commande INNER JOIN à un détail près. Elle affichera toutes les données de la table de "gauche", peu importe que la donnée ait une relation ou non.

Table de gauche ?

La table de gauche est celle se trouvant à gauche de la commande LEFT JOIN. Pour plus de simplicité, il s'agit de la table juste après la commande FROM.

SELECT * FROM users
LEFT JOIN city ON city.id = users.city_id

Résultat :

id prenom age city_id id name
1 Sylvie 34 1 1 Metz
2 Paul 56 2 2 Troyes
3 Léo 18 2 2 Troyes
4 Sarah 27 3 3 Reims
5 Mathilde 42 NULL NULL NULL

RIGHT JOIN

La commande RIGHT JOIN effectue le même travail que la commande LEFT JOIN sauf qu'elle affichera toutes les données de la table de "droite", peu importe que la donnée ait une relation ou non.

Table de droite ?

La table de droite est celle se trouvant à droite de la commande RIGHT JOIN.

SELECT * FROM users
RIGHT JOIN city ON city.id = users.city_id

Résultat :

id prenom age city_id id name
1 Sylvie 34 1 1 Metz
2 Paul 56 2 2 Troyes
3 Léo 18 2 2 Troyes
4 Sarah 27 3 3 Reims
NULL NULL NULL NULL 4 Paris