Jointures
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 commandeWHERE
: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 |