classDiagram
class Joueuse {
id_joueuse PK
nom
prenom
elo
id_club
}
class Club {
id_club PK
nom
ville
}
Objectifs
Dans les exemples ci-dessous, nous allons utiliser ces 2 tables.
Vous pouvez tout à fait faire des jointures avec 3 tables, 4 tables…
classDiagram
class Joueuse {
id_joueuse PK
nom
prenom
elo
id_club
}
class Club {
id_club PK
nom
ville
}
| 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 ? 😕
Ça fonctionne !
Mais c’est un peu long d’écrire avant chaque colonne le nom de la table.
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 |
| … | … | … |