Objectifs
Dans les exemples ci-dessous, nous allons utiliser ces 2 tables.
Vous pouvez tout à fait faire des jointures avec 3 tables, 4 tables…
id_joueuse | nom | prenom | elo | id_club |
---|---|---|---|---|
1 | Guichard | Pauline | 2357 | 3 |
2 | Daulyte | Deimante | 2371 | 1 |
3 | Navrotescu | Andreea | 2338 | 2 |
4 | Sebag | Marie | 2448 | 2 |
5 | Millet | Sophie | 2366 | 3 |
6 | Skrichempko | Almira | 2361 |
id_club | nom | ville |
---|---|---|
1 | C’Chartres Echecs | Chartres |
2 | Bischwiller | Bischwiller |
3 | Asnieres - le Grand Echiquier | Asnieres |
4 | Tours des Hauts-De-France | Saint-Quentin |
L’INNER JOIN renvoie uniquement les lignes qui ont des correspondances dans les deux tables.
Des soucis dans cette requête ? 😕
SELECT joueuse.nom,
joueuse.prenom,
club.nom AS club
FROM echecs.joueuse
INNER JOIN echecs.club ON club.id_club = joueuse.id_club;
Ça fonctionne !
Mais c’est un peu long d’écrire avant chaque colonne le nom de la table.
SELECT j.nom, -- signifie colonne nom de la table d'alias j
j.prenom,
c.nom AS club
FROM echecs.joueuse j -- déclare j comme alias de la table joueuse
INNER JOIN echecs.club c ON c.id_club = j.id_club;
Alias
Tip
Si votre base de données est bien conçue, les colonnes utilisées pour les jointures portent le même nom dans les deux tables.
Dans ce cas, et uniquement dans ce cas, vous pouvez utiliser le mot clé USING
à la place de ON
.
Vous pouvez même enlever le INNER
qui est optionnel.
Caution
Il est aussi possible de faire une jointure avec NATURAL JOIN
sans préciser aucun nom de colonnes. Cela va joindre les tables via les colonnes ayant le même nom dans les 2 tables.
Cette pratique est déconseillée, car vous ne maitrisez pas les colonnes servant à la jointure et c’est visuellement moins parlant.
nom | prenom | club |
---|---|---|
Daulyte | Deimante | C’Chartres Echecs |
Navrotescu | Andreea | Bischwiller |
Sebag | Marie | Bischwiller |
Guichard | Pauline | Asnieres - le Grand Echiquier |
Millet | Sophie | Asnieres - le Grand Echiquier |
Il n’y a pas quelque chose qui vous chagrine ? 😦
Ce serait pas mal d’afficher toutes les joueuses, même celles qui n’ont pas de club.
Comment faire ? 😐
Utilisons un LEFT JOIN
pour faire une jointure externe :
RIGHT JOIN
À l’inverse, le RIGHT JOIN
garde tout ce qu’il y a après et compléte si possible avec ce qu’il y a avant.
Il est moins utilisé car moins intuitif, mais reste parfois indispensable.
nom | prenom | club |
---|---|---|
Daulyte | Deimante | C’Chartres Echecs |
Navrotescu | Andreea | Bischwiller |
Sebag | Marie | Bischwiller |
Guichard | Pauline | Asnieres - le Grand Echiquier |
Millet | Sophie | Asnieres - le Grand Echiquier |
Skrichempko | Almira |
nom | prenom | club |
---|---|---|
Daulyte | Deimante | C’Chartres Echecs |
Navrotescu | Andreea | Bischwiller |
Sebag | Marie | Bischwiller |
Guichard | Pauline | Asnieres - le Grand Echiquier |
Millet | Sophie | Asnieres - le Grand Echiquier |
Tours des Hauts-De-France |
Le FULL JOIN
permet de faire une jointure bilatérale (i.e. un UNION entre les éléments de la LEFT JOIN et de la RIGHT JOIN)
nom | prenom | club |
---|---|---|
Daulyte | Deimante | C’Chartres Echecs |
Navrotescu | Andreea | Bischwiller |
Sebag | Marie | Bischwiller |
Guichard | Pauline | Asnieres - le Grand Echiquier |
Millet | Sophie | Asnieres - le Grand Echiquier |
Skrichempko | Almira | |
Tours des Hauts-De-France |
CROSS JOIN
renvoie le produit cartésien des deux tables.
nom | prenom | club |
---|---|---|
Daulyte | Deimante | C’Chartres Echecs |
Daulyte | Deimante | Bischwiller |
Daulyte | Deimante | Asnieres - le Grand Echiquier |
Daulyte | Deimante | Tours des Hauts-De-France |
Navrotescu | Andreea | C’Chartres Echecs |
Navrotescu | Andreea | Bischwiller |
Navrotescu | Andreea | Asnieres - le Grand Echiquier |
… | … | … |